blob: 53ac6c9bedc4b1ccf29bd76e7e0081ef393da26d [file] [log] [blame] [view]
dpranke0ae7cad2016-11-30 07:47:581# Checking out and building Chromium on Linux
andybons3322f762015-08-24 21:37:092
dpranke1a70d0c2016-12-01 02:42:293There are instructions for other platforms linked from the
4[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
120### Faster builds
121
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
125#### Disable NaCl
126
127By default, the build includes support for
128[Native Client (NaCl)](https://developer.chrome.com/native-client), but
129most of the time you won't need it. You can set the GN argument
130`enable_nacl=false` and it won't be built.
131
132#### Include fewer debug symbols
133
134By default GN produces a build with all of the debug assertions enabled
135(`is_debug=true`) and including full debug info (`symbol_level=2`). Setting
136`symbol_level=1` will produce enough information for stack traces, but not
137line-by-line debugging. Setting `symbol_level=0` will include no debug
138symbols at all. Either will speed up the build compared to full symbols.
139
dpranke0ae7cad2016-11-30 07:47:58140See [faster builds on Linux](linux_faster_builds.md) for various tips and
141settings that may speed up your build.
142
dpranke2989a782016-12-02 02:57:12143#### Disable debug symbols for Blink
144
145Due to its extensive use of templates, the Blink code produces about half
146of our debug symbols. If you don't ever need to debug Blink, you can set
147the GN arg `remove_webcore_debug_symbols=true`.
148
149#### Use Icecc
150
151[Icecc](https://github.com/icecc/icecream) is the distributed compiler with a
152central scheduler to share build load. Currently, many external contributors use
153it. e.g. Intel, Opera, Samsung (Googlers use an internal system called Goma).
154
155In order to use `icecc`, set the following GN args:
156
157```
158linux_use_bundled_binutils=false
159use_debug_fission=false
160is_clang=false
161use_sysroot=false
162```
163
164See these links for more on the
165[bundled_binutils limitation](https://github.com/icecc/icecream/commit/b2ce5b9cc4bd1900f55c3684214e409fa81e7a92),
166the [debug fission limitation](http://gcc.gnu.org/wiki/DebugFission).
167
168Using the system linker may also be necessary when using glibc 2.21 or newer.
169See [related bug](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=808181).
170
171#### ccache
172
173You can use [ccache](https://ccache.samba.org) to speed up local builds (again,
174this is not useful if you're using a Googler using Goma).
175
176Increase your ccache hit rate by setting `CCACHE_BASEDIR` to a parent directory
177that the working directories all have in common (e.g.,
178`/home/yourusername/development`). Consider using
179`CCACHE_SLOPPINESS=include_file_mtime` (since if you are using multiple working
180directories, header times in svn sync'ed portions of your trees will be
181different - see
182[the ccache troubleshooting section](http://ccache.samba.org/manual.html#_troubleshooting)
183for additional information). If you use symbolic links from your home directory
184to get to the local physical disk directory where you keep those working
185development directories, consider putting
186
187 alias cd="cd -P"
188
189in your `.bashrc` so that `$PWD` or `cwd` always refers to a physical, not
190logical directory (and make sure `CCACHE_BASEDIR` also refers to a physical
191parent).
192
193If you tune ccache correctly, a second working directory that uses a branch
194tracking trunk and is up to date with trunk and was gclient sync'ed at about the
195same time should build chrome in about 1/3 the time, and the cache misses as
196reported by `ccache -s` should barely increase.
197
198This is especially useful if you use `git-new-workdir` and keep multiple local
199working directories going at once.
200
201#### Using tmpfs
202
203You can use tmpfs for the build output to reduce the amount of disk writes
204required. I.e. mount tmpfs to the output directory where the build output goes:
205
206As root:
207
208 mount -t tmpfs -o size=20G,nr_inodes=40k,mode=1777 tmpfs /path/to/out
209
210*** note
211**Caveat:** You need to have enough RAM + swap to back the tmpfs. For a full
212debug build, you will need about 20 GB. Less for just building the chrome target
213or for a release build.
214***
215
216Quick and dirty benchmark numbers on a HP Z600 (Intel core i7, 16 cores
217hyperthreaded, 12 GB RAM)
218
219* With tmpfs:
220 * 12m:20s
221* Without tmpfs
222 * 15m:40s
223
dpranke0ae7cad2016-11-30 07:47:58224## Build Chromium
225
226Build Chromium (the "chrome" target) with Ninja using the command:
227
sdy93387fa2016-12-01 01:03:44228```shell
229$ ninja -C out/Default chrome
230```
dpranke0ae7cad2016-11-30 07:47:58231
sdy93387fa2016-12-01 01:03:44232You can get a list of all of the other build targets from GN by running `gn ls
233out/Default` from the command line. To compile one, pass the GN label to Ninja
234with no preceding "//" (so, for `//chrome/test:unit_tests` use `ninja -C
235out/Default chrome/test:unit_tests`).
dpranke0ae7cad2016-11-30 07:47:58236
237## Run Chromium
238
239Once it is built, you can simply run the browser:
240
sdy93387fa2016-12-01 01:03:44241```shell
242$ out/Default/chrome
243```
dpranke0ae7cad2016-11-30 07:47:58244
245## Running test targets
246
247You can run the tests in the same way. You can also limit which tests are
248run using the `--gtest_filter` arg, e.g.:
249
sdy93387fa2016-12-01 01:03:44250```shell
dpranke1a70d0c2016-12-01 02:42:29251$ out/Default/unit_tests --gtest_filter="PushClientTest.*"
sdy93387fa2016-12-01 01:03:44252```
dpranke0ae7cad2016-11-30 07:47:58253
254You can find out more about GoogleTest at its
255[GitHub page](https://github.com/google/googletest).
256
257## Update your checkout
258
259To update an existing checkout, you can run
260
sdy93387fa2016-12-01 01:03:44261```shell
262$ git rebase-update
263$ gclient sync
264```
dpranke0ae7cad2016-11-30 07:47:58265
266The first command updates the primary Chromium source repository and rebases
sdy93387fa2016-12-01 01:03:44267any of your local branches on top of tip-of-tree (aka the Git branch
268`origin/master`). If you don't want to use this script, you can also just use
269`git pull` or other common Git commands to update the repo.
dpranke0ae7cad2016-11-30 07:47:58270
sdy93387fa2016-12-01 01:03:44271The second command syncs dependencies to the appropriate versions and re-runs
272hooks as needed.
dpranke0ae7cad2016-11-30 07:47:58273
274## Tips, tricks, and troubleshooting
andybons3322f762015-08-24 21:37:09275
276### Linker Crashes
andybonsad92aa32015-08-31 02:27:44277
andybons3322f762015-08-24 21:37:09278If, during the final link stage:
andybonsad92aa32015-08-31 02:27:44279
sdy93387fa2016-12-01 01:03:44280```
281LINK out/Debug/chrome
282```
andybonsad92aa32015-08-31 02:27:44283
andybons3322f762015-08-24 21:37:09284You get an error like:
andybons3322f762015-08-24 21:37:09285
sdy93387fa2016-12-01 01:03:44286```
287collect2: ld terminated with signal 6 Aborted terminate called after throwing an instance of 'std::bad_alloc'
288collect2: ld terminated with signal 11 [Segmentation fault], core dumped
289```
andybonsad92aa32015-08-31 02:27:44290
brettwc25693b32016-05-26 01:11:52291you are probably running out of memory when linking. You *must* use a 64-bit
292system to build. Try the following build settings (see [GN build
293configuration](https://www.chromium.org/developers/gn-build-configuration) for
sdy93387fa2016-12-01 01:03:44294other settings):
andybonsad92aa32015-08-31 02:27:44295
sdy93387fa2016-12-01 01:03:44296* Build in release mode (debugging symbols require more memory):
brettwc25693b32016-05-26 01:11:52297 `is_debug = false`
sdy93387fa2016-12-01 01:03:44298* Turn off symbols: `symbol_level = 0`
299* Build in component mode (this is for development only, it will be slower and
300 may have broken functionality): `is_component_build = true`
andybons3322f762015-08-24 21:37:09301
dpranke0ae7cad2016-11-30 07:47:58302### More links
andybons3322f762015-08-24 21:37:09303
brettwc25693b32016-05-26 01:11:52304* Information about [building with Clang](clang.md).
dpranke0ae7cad2016-11-30 07:47:58305* You may want to [use a chroot](using_a_linux_chroot.md) to
306 isolate yourself from versioning or packaging conflicts.
andybonsad92aa32015-08-31 02:27:44307* Cross-compiling for ARM? See [LinuxChromiumArm](linux_chromium_arm.md).
308* Want to use Eclipse as your IDE? See
309 [LinuxEclipseDev](linux_eclipse_dev.md).
dpranke0ae7cad2016-11-30 07:47:58310* Want to use your built version as your default browser? See
andybonsad92aa32015-08-31 02:27:44311 [LinuxDevBuildAsDefaultBrowser](linux_dev_build_as_default_browser.md).
andybons3322f762015-08-24 21:37:09312
dpranke2989a782016-12-02 02:57:12313## Next Steps
andybonsad92aa32015-08-31 02:27:44314
315If you want to contribute to the effort toward a Chromium-based browser for
316Linux, please check out the [Linux Development page](linux_development.md) for
317more information.
dpranke2989a782016-12-02 02:57:12318
319## Notes for other distros <a name="notes"></a>
320
321### Arch Linux
322
323Instead of running `install-build-deps.sh` to install build dependencies, run:
324
325```shell
326$ sudo pacman -S --needed python perl gcc gcc-libs bison flex gperf pkgconfig \
327nss alsa-lib gconf glib2 gtk2 nspr ttf-ms-fonts freetype2 cairo dbus \
328libgnome-keyring
329```
330
331For the optional packages on Arch Linux:
332
333* `php-cgi` is provided with `pacman`
334* `wdiff` is not in the main repository but `dwdiff` is. You can get `wdiff`
335 in AUR/`yaourt`
336* `sun-java6-fonts` do not seem to be in main repository or AUR.
337
338### Debian
339
340`build/install-build-deps.sh` doesn't currently run on Debian, but you can
341probably hack it to get it to work. You will probably need to update the
342following package names:
343
344* `libexpat-dev` → `libexpat1-dev`
345* `freetype-dev` → `libfreetype6-dev`
346* `libbzip2-dev` → `libbz2-dev`
347* `libcupsys2-dev` → `libcups2-dev`
348
349### Fedora
350
351Instead of running `build/install-build-deps.sh`, run:
352
353```shell
354su -c 'yum install git python bzip2 tar pkgconfig atk-devel alsa-lib-devel \
355bison binutils brlapi-devel bluez-libs-devel bzip2-devel cairo-devel \
356cups-devel dbus-devel dbus-glib-devel expat-devel fontconfig-devel \
357freetype-devel gcc-c++ GConf2-devel glib2-devel glibc.i686 gperf \
358glib2-devel gtk2-devel gtk3-devel java-1.*.0-openjdk-devel libatomic \
359libcap-devel libffi-devel libgcc.i686 libgnome-keyring-devel libjpeg-devel \
360libstdc++.i686 libX11-devel libXScrnSaver-devel libXtst-devel \
361libxkbcommon-x11-devel ncurses-compat-libs nspr-devel nss-devel pam-devel \
362pango-devel pciutils-devel pulseaudio-libs-devel zlib.i686 httpd mod_ssl \
363php php-cli python-psutil wdiff'
364```
365
366The `msttcorefonts` packages can be obtained by following [these
367instructions](http://www.fedorafaq.org/#installfonts). For the optional
368packages:
369
370* `php-cgi` is provided by the `php-cli` package.
371* `sun-java6-fonts` doesn't exist in Fedora repositories, needs investigating.
372
373### Gentoo
374
375You can just run `emerge www-client/chromium`.
376
377### Mandriva
378
379Instead of running `build/install-build-deps.sh`, run:
380
381```shell
382urpmi lib64fontconfig-devel lib64alsa2-devel lib64dbus-1-devel \
383lib64GConf2-devel lib64freetype6-devel lib64atk1.0-devel lib64gtk+2.0_0-devel \
384lib64pango1.0-devel lib64cairo-devel lib64nss-devel lib64nspr-devel g++ python \
385perl bison flex subversion gperf
386```
387
388* `msttcorefonts` are not available, you will need to build your own (see
389 instructions, not hard to do, see
390 [mandriva_msttcorefonts.md](mandriva_msttcorefonts.md)) or use `drakfont` to
391 import the fonts from a Windows installation.
392
393### OpenSUSE
394
395Use `zypper` command to install dependencies:
396
397(openSUSE 11.1 and higher)
398
399```shell
400sudo zypper in subversion pkg-config python perl \
401 bison flex gperf mozilla-nss-devel glib2-devel gtk-devel \
402 wdiff lighttpd gcc gcc-c++ gconf2-devel mozilla-nspr \
403 mozilla-nspr-devel php5-fastcgi alsa-devel libexpat-devel \
404 libjpeg-devel libbz2-devel
405```
406
407For 11.0, use `libnspr4-0d` and `libnspr4-dev` instead of `mozilla-nspr` and
408`mozilla-nspr-devel`, and use `php5-cgi` instead of `php5-fastcgi`. And need
409`gtk2-devel`.
410
411(openSUSE 11.0)
412
413```shell
414sudo zypper in subversion pkg-config python perl \
415 bison flex gperf mozilla-nss-devel glib2-devel gtk-devel \
416 libnspr4-0d libnspr4-dev wdiff lighttpd gcc gcc-c++ libexpat-devel \
417 php5-cgi gconf2-devel alsa-devel gtk2-devel jpeg-devel
418```
419
420The Ubuntu package `sun-java6-fonts` contains a subset of Java of the fonts used.
421Since this package requires Java as a prerequisite anyway, we can do the same
422thing by just installing the equivalent openSUSE Sun Java package:
423
424```shell
425sudo zypper in java-1_6_0-sun
426```
427
428WebKit is currently hard-linked to the Microsoft fonts. To install these using `zypper`
429
430```shell
431sudo zypper in fetchmsttfonts pullin-msttf-fonts
432```
433
434To make the fonts installed above work, as the paths are hardcoded for Ubuntu,
435create symlinks to the appropriate locations:
436
437```shell
438sudo mkdir -p /usr/share/fonts/truetype/msttcorefonts
439sudo ln -s /usr/share/fonts/truetype/arial.ttf /usr/share/fonts/truetype/msttcorefonts/Arial.ttf
440sudo ln -s /usr/share/fonts/truetype/arialbd.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf
441sudo ln -s /usr/share/fonts/truetype/arialbi.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf
442sudo ln -s /usr/share/fonts/truetype/ariali.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf
443sudo ln -s /usr/share/fonts/truetype/comic.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS.ttf
444sudo ln -s /usr/share/fonts/truetype/comicbd.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf
445sudo ln -s /usr/share/fonts/truetype/cour.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf
446sudo ln -s /usr/share/fonts/truetype/courbd.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold.ttf
447sudo ln -s /usr/share/fonts/truetype/courbi.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold_Italic.ttf
448sudo ln -s /usr/share/fonts/truetype/couri.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Italic.ttf
449sudo ln -s /usr/share/fonts/truetype/impact.ttf /usr/share/fonts/truetype/msttcorefonts/Impact.ttf
450sudo ln -s /usr/share/fonts/truetype/times.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf
451sudo ln -s /usr/share/fonts/truetype/timesbd.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf
452sudo ln -s /usr/share/fonts/truetype/timesbi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold_Italic.ttf
453sudo ln -s /usr/share/fonts/truetype/timesi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf
454sudo ln -s /usr/share/fonts/truetype/verdana.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf
455sudo ln -s /usr/share/fonts/truetype/verdanab.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold.ttf
456sudo ln -s /usr/share/fonts/truetype/verdanai.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Italic.ttf
457sudo ln -s /usr/share/fonts/truetype/verdanaz.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold_Italic.ttf
458```
459
460The Ubuntu package `sun-java6-fonts` contains a subset of Java of the fonts used.
461Since this package requires Java as a prerequisite anyway, we can do the same
462thing by just installing the equivalent openSUSE Sun Java package:
463
464```shell
465sudo zypper in java-1_6_0-sun
466```
467
468WebKit is currently hard-linked to the Microsoft fonts. To install these using `zypper`
469
470```shell
471sudo zypper in fetchmsttfonts pullin-msttf-fonts
472```
473
474To make the fonts installed above work, as the paths are hardcoded for Ubuntu,
475create symlinks to the appropriate locations:
476
477```shell
478sudo mkdir -p /usr/share/fonts/truetype/msttcorefonts
479sudo ln -s /usr/share/fonts/truetype/arial.ttf /usr/share/fonts/truetype/msttcorefonts/Arial.ttf
480sudo ln -s /usr/share/fonts/truetype/arialbd.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf
481sudo ln -s /usr/share/fonts/truetype/arialbi.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf
482sudo ln -s /usr/share/fonts/truetype/ariali.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf
483sudo ln -s /usr/share/fonts/truetype/comic.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS.ttf
484sudo ln -s /usr/share/fonts/truetype/comicbd.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf
485sudo ln -s /usr/share/fonts/truetype/cour.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf
486sudo ln -s /usr/share/fonts/truetype/courbd.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold.ttf
487sudo ln -s /usr/share/fonts/truetype/courbi.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold_Italic.ttf
488sudo ln -s /usr/share/fonts/truetype/couri.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Italic.ttf
489sudo ln -s /usr/share/fonts/truetype/impact.ttf /usr/share/fonts/truetype/msttcorefonts/Impact.ttf
490sudo ln -s /usr/share/fonts/truetype/times.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf
491sudo ln -s /usr/share/fonts/truetype/timesbd.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf
492sudo ln -s /usr/share/fonts/truetype/timesbi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold_Italic.ttf
493sudo ln -s /usr/share/fonts/truetype/timesi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf
494sudo ln -s /usr/share/fonts/truetype/verdana.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf
495sudo ln -s /usr/share/fonts/truetype/verdanab.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold.ttf
496sudo ln -s /usr/share/fonts/truetype/verdanai.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Italic.ttf
497sudo ln -s /usr/share/fonts/truetype/verdanaz.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold_Italic.ttf
498```
499
500And then for the Java fonts:
501
502```shell
503sudo mkdir -p /usr/share/fonts/truetype/ttf-lucida
504sudo find /usr/lib*/jvm/java-1.6.*-sun-*/jre/lib -iname '*.ttf' -print \
505 -exec ln -s {} /usr/share/fonts/truetype/ttf-lucida \;
506```