Introduction 1
Licensing 2
Who This Book Is For 3
Those Wanting to Become Intermediate or Advanced Users 3
Sysadmins, Programmers, and DevOps 4
What This Book Contains 5
Conventions Used in This Book 6
Part I Getting Started
1 Installing Ubuntu and Post-Installation Configuration 9
Before You Begin the Installation 9
Researching Your Hardware Specifications 10
Installation Options 10
32-Bit vs 64-Bit Ubuntu 12
Planning Partition Strategies 12
The Boot Loader 13
Installing from DVD or USB Drive 14
Step-by-Step Installation 14
Installing 15
First Update 19
Shutting Down 19
Finding Programs and Files 20
Software Updater 21
The sudo Command 24
Configuring Software Repositories 25
System Settings 27
Detecting and Configuring a Printer 28
Configuring Power Management in Ubuntu 29
Setting the Time and Date 29
Configuring Wireless Networks 31
Troubleshooting Post-Installation Configuration Problems 33
References 34
2 Background Information and Resources 35
What Is Linux? 35
Why Use Linux? 36
What Is Ubuntu? 38
Ubuntu for Business 39
Ubuntu in Your Home 40
Getting the Most from Ubuntu and Linux Documentation 40
Ubuntu Developers and Documentation 42
Websites and Search Engines 42
Web Search Tips 42
Google Is Your Friend 43
Ubuntu Package Listings 43
Commercial Support 44
Documentation 44
Linux Guides 44
Ubuntu 45
Mailing Lists 46
Ubuntu Project Mailing Lists 46
Internet Relay Chat 47
Part II Desktop Ubuntu
3 Working with Unity 49
Foundations and the X Server 49
Basic X Concepts 50
Using X 51
Elements of the xorg.conf File 52
Starting X 57
Using a Display Manager 58
Changing Window Managers 58
Using Unity, a Primer 59
The Desktop 59
Customizing and Configuring Unity 65
Power Shortcuts 66
References 67
4 On the Internet 69
Getting Started with Firefox 70
Checking Out Google Chrome and Chromium 71
Choosing an Email Client 73
Mozilla Thunderbird 73
Evolution 74
Other Mail Clients 75
RSS Readers 76
Firefox 76
Liferea 76
Instant Messaging and Video Conferencing
with Empathy 77
Internet Relay Chat 78
Usenet Newsgroups 80
Ubuntu One Cloud Storage 82
References 82
5 Productivity Applications 83
Introducing LibreOffice 85
Other Office Suites for Ubuntu 87
Working with GNOME Office 87
Working with KOffice 88
Other Useful Productivity Software 89
Working with PDF 89
Working with XML and DocBook 89
Working with LaTeX 91
Productivity Applications Written for Microsoft Windows 91
References 92
6 Multimedia Applications 93
Sound and Music 93
Sound Cards 94
Adjusting Volume 95
Sound Formats 96
Listening to Music 97
Buying Music in the Ubuntu One Music Store 99
Graphics Manipulation 100
The GNU Image Manipulation Program 101
Using Scanners in Ubuntu 103
Working with Graphics Formats 103
Capturing Screen Images 105
Other Graphics Manipulation Options 106
Using Digital Cameras with Ubuntu 106
Handheld Digital Cameras 106
Using Shotwell Photo Manager 107
Burning CDs and DVDs in Ubuntu 107
Creating CDs and DVDs with Brasero 108
Creating CDs from the Command Line 109
Creating DVDs from the Command Line 110
Viewing Video 112
TV and Video Hardware 112
Video Formats 114
Viewing Video in Linux 114
Personal Video Recorders 116
Video Editing 116
References 117
7 Other Ubuntu Interfaces 119
Desktop Environment 120
KDE and Kubuntu 121
Xfce and Xubuntu 122
LXDE and Lubuntu 123
GNOME 3 and Ubuntu GNOME 124
Ubuntu Kylin 125
References 126
8 Games 127
Ubuntu Gaming 127
Installing Proprietary Video Drivers 128
Installing Games in Ubuntu 129
Warsow 130
Scorched 3D 130
Frozen Bubble 131
SuperTux 132
Battle for Wesnoth 132
Frets on Fire 134
FlightGear 134
Speed Dreams 134
Games for Kids 134
Commercial Games 135
Playing Windows Games 136
References 136
Part III System Administration
9 Managing Software 139
Ubuntu Software Center 139
Using Synaptic for Software Management 140
Staying Up-to-Date 142
Working on the Command Line 143
Day-to-Day Usage 144
Finding Software 147
Compiling Software from Source 148
Compiling from a Tarball 148
Compiling from Source from the Ubuntu Repositories 149
Configuration Management 150
dotdee 150
OneConf 151
References 151
10 Command-Line Quickstart 153
What Is the Command Line? 154
Accessing the Command Line 155
Text-Based Console Login 156
Logging Out 157
Logging In and Out from a Remote Computer 157
User Accounts 158
Reading Documentation 160
Using Man Pages 160
Using apropros 160
Using whereis 161
Understanding the Linux File System Hierarchy 161
Essential Commands in /bin and /sbin 162
Configuration Files in /etc 163
User Directories: /home 163
Using the Contents of the /proc Directory to
Interact with the Kernel 164
Working with Shared Data in the /usr Directory 165
Temporary File Storage in the /tmp Directory 166
Accessing Variable Data Files in the /var Directory 166
Navigating the Linux File System 166
Listing the Contents of a Directory with ls 166
Changing Directories with cd 168
Finding Your Current Directory with pwd 169
Working with Permissions 169
Assigning Permissions 170
Directory Permissions 171
Altering File Permissions with chmod 172
File Permissions with chgrp 173
Changing File Permissions with chown 173
Understanding Set User ID and Set Group ID Permissions 173
Working with Files 175
Creating a File with touch 175
Creating a Directory with mkdir 175
Deleting a Directory with rmdir 176
Deleting a File or Directory with rm 177
Moving or Renaming a File with mv 177
Copying a File with cp 178
Displaying the Contents of a File with cat 179
Displaying the Contents of a File with less 179
Using Wildcards and Regular Expressions 179
Working as Root 180
Understanding and Fixing sudo 180
Creating Users 183
Deleting Users 184
Shutting Down the System 184
Rebooting the System 185
Commonly Used Commands and Programs 185
References 186
11 Command-Line Master Class 187
Why Use the Command Line? 188
Using Basic Commands 189
Printing the Contents of a File with cat 190
Changing Directories with cd 191
Changing File Access Permissions with chmod 193
Copying Files with cp 193
Printing Disk Usage with du 194
Finding Files by Searching with find 195
Searches for a String in Input with grep 197
Paging Through Output with less 198
Creating Links Between Files with ln 200
Finding Files from an Index with locate 202
Listing Files in the Current Directory with ls 202
Reading Manual Pages with man 204
Making Directories with mkdir 205
Moving Files with mv 205
Listing Processes with ps 206
Deleting Files and Directories with rm 206
Printing the Last Lines of a File with tail 207
Printing Resource Usage with top 207
Using echo 209
Printing the Location of a Command with which 210
Redirecting Output and Input 210
stdin, stdout, sdterr, and Redirection 211
Comparing Files 212
Finding Differences in Files with diff 213
Finding Similarities in Files with comm 213
Combining Commands 214
Pipes 214
Running One or More Tasks in the Background 216
Combining Commands with Boolean Operators 216
Running Separate Commands in Sequence 217
Using Environment Variables 217
Using Common Text Editors 220
Working with nano 222
Working with vi 222
Working with emacs 223
Working with sed and awk 225
Working with Compressed Files 227
Using Multiple Terminals with byobu 227
Polite System Reset using REISUB 229
Limiting Resource Use 230
References 231
12 Managing Users 233
User Accounts 233
The Super User/Root User 234
User IDs and Group IDs 236
File Permissions 236
Managing Groups 237
Group Listing 237
Group Management Tools 238
Managing Users 240
User Management Tools 240
Adding New Users 242
Monitoring User Activity on the System 246
Managing Passwords 246
System Password Policy 246
The Password File 247
Shadow Passwords 248
Managing Password Security for Users 250
Changing Passwords in a Batch 251
Granting System Administrator Privileges to
Regular Users 251
Temporarily Changing User Identity with the su Command 251
Granting Root Privileges on Occasion: The sudo Command 253
Disk Quotas 256
Implementing Quotas 257
Manually Configuring Quotas 257
Related Ubuntu Commands 258
References 259
13 Automating Tasks and Shell Scripting 261
Scheduling Tasks 261
Using at and batch to Schedule Tasks for Later 261
Using cron to Run Jobs Repeatedly 264
Using rtcwake to Wake Your Computer from
Sleep Automatically 266
Basic Shell Control 268
The Shell Command Line 269
Shell Pattern-Matching Support 270
Redirecting Input and Output 271
Piping Data 272
Background Processing 272
Writing and Executing a Shell Script 273
Running the New Shell Program 274
Storing Shell Scripts for System-wide Access 275
Interpreting Shell Scripts Through Specific Shells 276
Using Variables in Shell Scripts 277
Assigning a Value to a Variable 278
Accessing Variable Values 278
Positional Parameters 278
A Simple Example of a Positional Parameter 279
Using Positional Parameters to Access and Retrieve Variables
from the Command Line 280
Using a Simple Script to Automate Tasks 280
Built-In Variables 282
Special Characters 283
Using Double Quotes to Resolve Variables in Strings
with Embedded Spaces 284
Using Single Quotes to Maintain Unexpanded Variables 284
Using the Backslash as an Escape Character 285
Using the Backtick to Replace a String with Output 286
Comparison of Expressions in pdksh and bash 286
Comparing Expressions with tcsh 291
The for Statement 295
The while Statement 297
The until Statement 298
The repeat Statement (tcsh) 299
The select Statement (pdksh) 299
The shift Statement 300
The if Statement 300
The case Statement 302
The break and exit Statements 304
Using Functions in Shell Scripts 304
References 305
14 The Boot Process 307
Running Services at Boot 307
Beginning the Boot Loading Process 308
Loading the Linux Kernel 309
System Services and Runlevels 310
Runlevel Definitions 310
Booting into the Default Runlevel 311
Understanding init Scripts and the Final Stage of Initialization 311
Controlling Services at Boot with Administrative Tools 312
Changing Runlevels 312
Troubleshooting Runlevel Problems 313
Starting and Stopping Services Manually 314
Using Upstart 315
References 316
15 System-Monitoring Tools 317
Console-Based Monitoring 317
Using the kill Command to Control Processes 319
Using Priority Scheduling and Control 320
Displaying Free and Used Memory with free 323
Disk Space 323
Disk Quotas 324
Checking Log Files 324
Graphical Process and System Management Tools 326
System Monitor 326
Conky 328
Other 333
KDE Process- and System-Monitoring Tools 333
Enterprise Server Monitoring 333
Landscape 334
Other 334
References 334
16 Backing Up 335
Choosing a Backup Strategy 335
Why Data Loss Occurs 336
Assessing Your Backup Needs and Resources 337
Evaluating Backup Strategies 339
Making the Choice 342
Choosing Backup Hardware and Media 342
Removable Storage Media 342
CD-RW and DVD+RW/-RW Drives 343
Network Storage 343
Tape Drive Backup 343
Cloud Storage 344
Using Backup Software 344
tar: The Most Basic Backup Tool 345
The GNOME File Roller 347
The KDE ark Archiving Tool 348
Deja Dup 348
Back In Time 350
Unison 352
Using the Amanda Backup Application 352
Alternative Backup Software 353
Copying Files 354
Copying Files Using tar 354
Compressing, Encrypting, and Sending tar Streams 355
Copying Files Using cp 355
Copying Files Using mc 356
Using rsync 356
Version Control for Configuration Files 358
System Rescue 360
The Ubuntu Rescue Disc 361
Restoring the GRUB2 Boot Loader 361
Saving Files from a Nonbooting Hard Drive 362
References 362
17 Networking 363
Laying the Foundation: The localhost Interface 364
Checking for the Availability of the Loopback Interface 364
Configuring the Loopback Interface Manually 364
Checking Connections with ping, traceroute, and mtr 366
Networking with TCP/IP 368
TCP/IP Addressing 369
Using IP Masquerading in Ubuntu 371
Ports 372
IPv6 Basics 372
Network Organization 375
Subnetting 375
Subnet Masks 376
Broadcast, Unicast, and Multicast Addressing 376
Hardware Devices for Networking 377
Network Interface Cards 377
Network Cable 379
Hubs and Switches 380
Routers and Bridges 381
Initializing New Network Hardware 381
Using Network Configuration Tools 383
Command-Line Network Interface Configuration 384
Network Configuration Files 389
Using Graphical Configuration Tools 391
Dynamic Host Configuration Protocol 393
How DHCP Works 393
Activating DHCP at Installation and Boot Time 394
DHCP Software Installation and Configuration 395
Using DHCP to Configure Network Hosts 397
Other Uses for DHCP 399
Wireless Networking 399
Support for Wireless Networking in Ubuntu 399
Advantages of Wireless Networking 401
Choosing from Among Available Wireless Protocols 401
Beyond the Network and onto the Internet 402
Common Configuration Information 402
Configuring Digital Subscriber Line Access 404
Understanding PPP over Ethernet 404
Configuring a PPPoE Connection Manually 405
Configuring Dial-Up Internet Access 406
Troubleshooting Connection Problems 407
References 408
18 Remote Access with SSH and Telnet 409
Setting Up a Telnet Server 409
Telnet Versus SSH 411
Setting Up an SSH Server 411
SSH Tools 411
Using scp to Copy Individual Files Between Machines 412
Using sftp to Copy Many Files Between Machines 413
Using ssh-keygen to Enable Key-Based Logins 413
Virtual Network Computing 415
References 417
19 Securing Your Machines 419
Understanding Computer Attacks 419
Assessing Your Vulnerability 421
Protecting Your Machine 422
Securing a Wireless Network 423
Passwords and Physical Security 423
Configuring and Using Tripwire 424
Devices 425
Viruses 425
Configuring Your Firewall 426
AppArmor 430
Forming a Disaster Recovery Plan 432
References 433
20 Performance Tuning 435
Hard Disk 435
Using the BIOS and Kernel to Tune the Disk Drives 436
The hdparm Command 437
File System Tuning 438
The tune2fs Command 438
The e2fsck Command 439
The badblocks Command 439
Disabling File Access Time 439
Kernel 440
Apache 441
MySQL 442
Measuring Key Buffer Usage 442
Using the Query Cache 444
Miscellaneous Tweaks 445
Query Optimization 446
References 446
21 Kernel and Module Management 447
The Linux Kernel 448
The Linux Source Tree 449
Types of Kernels 451
Managing Modules 452
When to Recompile 454
Kernel Versions 455
Obtaining the Kernel Sources 456
Patching the Kernel 457
Compiling the Kernel 458
Using xconfig to Configure the Kernel 461
Creating an Initial RAM Disk Image 464
When Something Goes Wrong 465
Errors During Compile 465
Runtime Errors, Boot Loader Problems, and Kernel Oops 466
References 466
Part IV Ubuntu as a Server
22 Sharing Files and Printers 469
Using the Network File System 470
Installing and Starting or Stopping NFS 470
NFS Server Configuration 470
NFS Client Configuration 472
Putting Samba to Work 473
Manually Configuring Samba with /etc/samba/smb.conf 474
Testing Samba with the testparm Command 477
Starting, Stopping, and Restarting the smbd Daemon 478
Mounting Samba Shares 479
Configuring Samba Using SWAT 480
Network and Remote Printing with Ubuntu 483
Creating Network Printers 484
Using the Common UNIX Printing System GUI 486
Avoiding Printer Support Problems 488
References 489
23 Apache Web Server Management 491
About the Apache Web Server 491
Installing the Apache Server 492
Installing from the Ubuntu Repositories 493
Building the Source Yourself 494
Starting and Stopping Apache 497
Starting the Apache Server Manually 497
Using /etc/init.d/apache2 498
Runtime Server Configuration Settings 499
Runtime Configuration Directives 500
Editing apache2.conf 500
Apache Multiprocessing Modules 503
Using .htaccess Configuration Files 503
File System Authentication and Access Control 505
Restricting Access with allow and deny 506
Authentication 507
Final Words on Access Control 509
Apache Modules 510
mod_access 510
mod_alias 511
mod_asis 511
mod_auth 511
mod_auth_anon 512
mod_auth_dbm 512
mod_auth_digest 512
mod_autoindex 512
mod_cgi 512
mod_dir and mod_env 512
mod_expires 513
mod_headers 513
mod_include 513
mod_info and mod_log_config 513
mod_mime and mod_mime_magic 513
mod_negotiation 513
mod_proxy 514
mod_rewrite 514
mod_setenvif 514
mod_speling 514
mod_status 514
mod_ssl 514
mod_unique_id 515
mod_userdir 515
mod_usertrack 515
mod_vhost_alias 515
Virtual Hosting 515
Address-Based Virtual Hosts 515
Name-Based Virtual Hosts 516
Logging 517
References 519
24 Nginx Web Server Management 521
About the Nginx Web Server 521
Installing the Nginx Server 523
Installing from the Ubuntu Repositories 523
Building the Source Yourself 524
Configuring the Nginx Server 524
Virtual Hosting 527
Setting Up PHP 528
Adding and Configuring Modules 530
References 530
25 Other HTTP Servers 531
lighttpd 531
Yaws 532
Cherokee 533
Jetty 533
thttpd 534
Apache Tomcat 534
References 534
26 Remote File Serving with FTP 535
Choosing an FTP Server 535
Choosing an Authenticated or Anonymous Server 536
Ubuntu FTP Server Packages 536
Other FTP Servers 536
Installing FTP Software 537
The FTP User 538
Configuring the Very Secure FTP Server 540
Controlling Anonymous Access 541
Other vsftpd Server Configuration Files 542
Using the ftphosts File to Allow or Deny FTP Server Connection 543
References 544
27 Handling Email 545
How Email Is Sent and Received 545
The Mail Transport Agent 546
Choosing an MTA 548
The Mail Delivery Agent 548
The Mail User Agent 549
Basic Postfix Configuration and Operation 550
Configuring Masquerading 552
Using Smart Hosts 553
Setting Message Delivery Intervals 553
Mail Relaying 554
Forwarding Email with Aliases 554
Using Fetchmail to Retrieve Mail 555
Installing Fetchmail 555
Configuring Fetchmail 555
Choosing a Mail Delivery Agent 559
Procmail 559
Spamassassin 559
Squirrelmail 560
Virus Scanners 560
Autoresponders 560
Alternatives to Microsoft Exchange Server 560
Microsoft Exchange Server/Outlook Client 561
CommuniGate Pro 561
Oracle Beehive 562
Bynari 562
Open-Xchange 562
phpgroupware 562
PHProjekt 562
Horde 562
References 563
28 Proxying, Reverse Proxying, and Virtual Private Networks (VPN) 565
What Is a Proxy Server? 565
Installing Squid 566
Configuring Clients 566
Access Control Lists 567
Specifying Client IP Addresses 571
Sample Configurations 572
Virtual Private Networks (VPN) 574
Setting Up a VPN Client 575
Setting Up a VPN Server 577
References 579
29 Administering Relational Database Services 581
A Brief Review of Database Basics 582
How Relational Databases Work 584
Understanding SQL Basics 586
Creating Tables 586
Inserting Data into Tables 587
Retrieving Data from a Database 588
Choosing a Database: MySQL Versus PostgreSQL 590
Speed 590
Data Locking 591
ACID Compliance in Transaction Processing to
Protect Data Integrity 591
SQL Subqueries 592
Procedural Languages and Triggers 592
Configuring MySQL 593
Setting a Password for the MySQL Root User 594
Creating a Database in MySQL 594
Configuring PostgreSQL 596
Initializing the Data Directory in PostgreSQL 596
Creating a Database in PostgreSQL 597
Creating Database Users in PostgreSQL 598
Deleting Database Users in PostgreSQL 598
Granting and Revoking Privileges in PostgreSQL 599
Database Clients 599
SSH Access to a Database 600
Local GUI Client Access to a Database 601
Web Access to a Database 602
The MySQL Command-Line Client 603
The PostgreSQL Command-Line Client 604
Graphical Clients 605
References 605
30 NoSQL Databases 607
Key/Value Stores 610
Berkeley DB 610
Cassandra 611
Memcached and MemcacheDB 611
Redis 612
Riak 612
Document Stores 612
CouchDB 613
MongoDB 614
BaseX 614
Wide Column Stores 615
BigTable 615
HBase 615
Graph Stores 616
Neo4j 616
OrientDB 616
HyperGraphDB 616
FlockDB 617
References 617
31 Lightweight Directory Access Protocol (LDAP) 619
Configuring the Server 620
Creating Your Schema 620
Populating Your Directory 622
Configuring Clients 624
Evolution 624
Thunderbird 625
Administration 625
References 626
32 Linux Terminal Server Project (LTSP) 627
Requirements 628
Installation 631
Using LTSP 632
References 633
33 Virtualization on Ubuntu 635
KVM 637
VirtualBox 641
VMware 643
Xen 643
References 643
34 Ubuntu in the Cloud 645
Why a Cloud? 646
Software as a Service (SaaS) 647
Platform as a Service (PaaS) 647
Infrastructure as a Service (IaaS) 647
Metal as a Service (MaaS) 647
Before You Do Anything 648
Ubuntu Cloud and Eucalyptus 648
Deploy/Install Basics: Public or Private? 650
Public 650
Private 651
A euca2ools Primer 654
Ubuntu Cloud and OpenStack 656
Compute Infrastructure (Nova) 656
Storage Infrastructure (Swift) 657
Imaging Service (Glance) 657
Installation 657
Creating an Image 667
Instance Management 670
Storage Management 671
Network Management 671
An OpenStack Commands Primer 672
Learning More 672
Juju 672
Getting Started 673
Charms 676
The Juju GUI 677
Juju on Mac OS X 678
Ubuntu Metal as a Service (MaaS) 678
Landscape 679
References 679
35 Managing Sets of Servers 681
Juju 681
Puppet 682
Chef 682
CFEngine 683
Ansible 683
Landscape 683
References 683
36 Name Serving with the Domain Name System (DNS) 685
Understanding Domain Names 687
DNS Servers 687
DNS Records 688
Setting Up a DNS Server with BIND 691
References 693
Part V Programming Linux
37 Opportunistic Development 695
Version Control Systems 696
Managing Software Projects with Subversion 696
Managing Software Projects with Bazaar 697
Managing Software Projects with Mercurial 698
Managing Software Projects with Git 699
Introduction to Opportunistic Development 700
Launchpad 701
Quickly 703
Ground Control 707
Bikeshed and Other Tools 711
References 713
38 Helping with Ubuntu Development 715
Introduction to Ubuntu Development 716
Setting Up Your Development System 717
Install Basic Packages and Configure 717
Create a Launchpad Account 718
Set Up Your Environment to Work with Launchpad 718
Fixing Bugs and Packaging 720
Finding Bugs to Fix with Harvest 723
Masters of the Universe 723
References 723
39 Helping with Ubuntu Testing and QA 725
Community Teams 725
Ubuntu Testing Team 726
QA Team 726
Bug Squad 727
Test Drive 727
References 730
40 Using Perl 731
Using Perl with Linux 731
Perl Versions 732
A Simple Perl Program 732
Perl Variables and Data Structures 734
Perl Variable Types 735
Special Variables 735
Operators 736
Comparison Operators 736
Compound Operators 737
Arithmetic Operators 737
Other Operators 738
Special String Constants 738
Conditional Statements: if/else and unless 739
if 739
unless 740
Looping 740
for 740
foreach 741
while 741
until 742
last and next 742
do while and do until 742
Regular Expressions 743
Access to the Shell 744
Modules and CPAN 745
Code Examples 745
Sending Mail 745
Purging Logs 747
Posting to Usenet 748
One-Liners 749
Command-Line Processing 750
References 750
41 Using Python 753
Python on Linux 754
The Basics of Python 755
Numbers 755
More on Strings 757
Lists 760
Dictionaries 762
Conditionals and Looping 763
Functions 765
Object Orientation 766
Class and Object Variables 767
Constructors and Destructors 768
Class Inheritance 769
The Standard Library and the Python Package Index 771
References 771
42 Using PHP 773
Introduction to PHP 774
Entering and Exiting PHP Mode 774
Variables 774
Arrays 776
Constants 778
References 778
Comments 779
Escape Sequences 779
Variable Substitution 780
Operators 781
Conditional Statements 783
Special Operators 784
Switching 785
Loops 787
Including Other Files 789
Basic Functions 790
Strings 790
Arrays 793
Files 795
Miscellaneous 797
Handling HTML Forms 801
Databases 801
References 804
43 C/C++ Programming Tools for Ubuntu 805
Programming in C with Linux 806
Using the C Programming Project Management
Tools Provided with Ubuntu 807
Building Programs with make 807
Using Makefiles 807
Using the autoconf Utility to Configure Code 809
Debugging Tools 810
Using the GNU C Compiler 811
Graphical Development Tools 812
Using the KDevelop Client 812
The Glade Client for Developing in GNOME 813
References 814
Part VI Appendices
44 Using Other Popular Programming Languages 817
Ada 818
Clojure 819
COBOL 819
D 820
Erlang 820
Forth 821
Go 821
Fortran 822
Groovy 822
Haskell 822
Java 823
JavaScript 823
Lisp 824
Lua 824
Mono 825
Ruby 825
Rust 826
Scala 826
Scratch 826
Vala 827
References 827
45 Beginning Mobile Development for Android 829
Introduction to Android 830
Hardware 830
Linux Kernel 830
Libraries 830
Android Runtime 830
Application Framework 830
Applications 831
Installing the Android SDK 831
Install Java 831
Install Eclipse 831
Install the SDK 831
Install the ADT Eclipse Plug-In 832
Install Other Components 832
Install Virtual Devices 833
Create Your First Application 834
References 835
46 Developing for Ubuntu Mobile/Touch 837
Install the SDK 838
Create Your First Application 838
Learn About Ubuntu Design 839
Study the User Interface Toolkit 839
References 840
Index 841