Ubuntu Unleashed 2017 Edition (Includes Content Update Program)

Matthew Helmke  
Sams Publishing
Total pages
October 2016
Related Titles

Product detail

Product Price CHF Available  
Ubuntu Unleashed 2017 Edition (Includes Content Update Program)
60.20 approx. 7-9 days


Ubuntu Unleashed 2017 Edition is filled with unique and advanced information for everyone who wants to make the most of the Ubuntu Linux operating system, including the latest in Ubuntu mobile development. This new edition has been thoroughly updated by a long-time Ubuntu community leader to reflect the exciting new Ubuntu 16.10 and the forthcoming Ubuntu 17.04 and 17.08. Helmke presents up-to-the-minute introductions to Ubuntu’s key productivity and Web development tools, programming languages, hardware support, and more. This book will now be part of CUPs (the Content Update Program).


  • The book is thorough revised covers the most recent release
  • New to this edition is expanded coverage of Ubuntu Core
  • Includes detailed information on the latest developments in and improvements to Ubuntu Linux
  • Includes a free Kick Start chapter in the web edition of the book with each six month release

New to this Edition

Ubuntu Unleashed 2017 will benefit from coverage of features for Ubuntu Core, which uses a a new means of application and software management that could both streamline and secure the process beyond the abilities of current package management systems. Attention will be on its "snappy" (code name) form of software security and management. There is also new coverage of UEFI, which has basically replaced BIOS in modern PCs.

Free Kick Start chapter will now be added to the web edition of the book with each six month release. The Ubuntu Kick Start chapters will be posted after the releases of Ubuntu 17.04 and 17.10.


Table of Contents

Introduction   xxxiii
Licensing   xxxiv
Who This Book Is For   xxxv
   Those Wanting to Become Intermediate or Advanced Users   xxxv
   Sysadmins, Programmers, and DevOps   xxxvi
What This Book Contains   xxxvii
Conventions Used in This Book   xxxviii

Chapter 1  Installing Ubuntu and Post-Installation Configuration   1

Before You Begin the Installation   1
   Researching Your Hardware Specifications   2
   Installation Options   2
   32-Bit vs 64-Bit Ubuntu   4
   Planning Partition Strategies   5
   The Boot Loader   5
   Installing from DVD or USB Drive   6
Step-by-Step Installation   6
   Installing   7
   First Update   13
Shutting Down   13
Finding Programs and Files   14
Software Updater   15
The sudo Command   18
Configuring Software Repositories   19
System Settings   21
   Detecting and Configuring a Printer   22
   Configuring Power Management in Ubuntu   22
Setting the Time and Date   23
Configuring Wireless Networks   24
Troubleshooting Post-Installation Configuration Problems   26
References   27
Chapter 2  Background Information and Resources   29
What Is Linux?   29
Why Use Linux?   31
What Is Ubuntu?   33
Ubuntu for Business   33
Ubuntu in Your Home   35
Getting the Most from Ubuntu and Linux Documentation   35
Ubuntu Developers and Documentation   36
Websites and Search Engines   37
   Web Search Tips   37
   Google Is Your Friend   37
   Ubuntu Package Listings   38
   Commercial Support   38
   Documentation   39
Linux Guides   39
   Ubuntu   40
Mailing Lists   40
   Ubuntu Project Mailing Lists   41
Internet Relay Chat   42

Chapter 3  Working with Unity   43

Foundations and the X Server   43
   Basic X Concepts   44
   Using X   45
   Elements of the xorg.conf File   46
   Starting X   51
   Using a Display Manager   51
   Changing Window Managers   52
Using Unity, a Primer   52
   The Desktop   53
   Customizing and Configuring Unity   58
Power Shortcuts   60
References   61
Chapter 4  On the Internet   63
Getting Started with Firefox   63
Checking Out Google Chrome and Chromium65
Choosing an Email Client   66
   Mozilla Thunderbird   66
   Evolution   67
   Other Mail Clients   68
RSS Readers   69
   Firefox   69
   Liferea   69
Internet Relay Chat   70
Usenet Newsgroups   72
References   74
Chapter 5  Productivity Applications   75
Introducing LibreOffice   76
Other Office Suites for Ubuntu   78
   Working with GNOME Office   78
   Working with KOffice   80
Other Useful Productivity Software   80
   Working with PDF   80
   Working with XML and DocBook   81
   Working with LaTeX   82
Productivity Applications Written for Microsoft Windows   83
References   83
Chapter 6  Multimedia Applications   85
Sound and Music   85
   Sound Cards   86
   Adjusting Volume   87
   Sound Formats   88
   Listening to Music   89
Graphics Manipulation   92
   The GNU Image Manipulation Program   93
   Using Scanners in Ubuntu   94
   Working with Graphics Formats   95
   Capturing Screen Images   97
   Other Graphics Manipulation Options   97
Using Digital Cameras with Ubuntu   98
   Handheld Digital Cameras   98
   Using Shotwell Photo Manager   98
Burning CDs and DVDs in Ubuntu   99
   Creating CDs and DVDs with Brasero   99
   Creating CDs from the Command Line   100
   Creating DVDs from the Command Line   102
Viewing Video   104
   TV and Video Hardware   104
   Video Formats   105
   Viewing Video in Linux   106
   Personal Video Recorders   107
   Video Editing   107
References   109
Chapter 7  Other Ubuntu Interfaces   111
Desktop Environment   112
KDE and Kubuntu   113
Xfce and Xubuntu   114
   LXDE and Lubuntu   115
GNOME3 and Ubuntu GNOME   116
MATE and Ubuntu MATE   117
Ubuntu Kylin   118
References   118
Chapter 8  Games   121
Ubuntu Gaming   121
Installing Proprietary Video Drivers   122
Steam   123
Installing Games in Ubuntu   123
   Warsow   124
   Scorched 3D   124
   Frozen Bubble   125
   SuperTux   126
   Battle for Wesnoth   126
   Frets on Fire   127
   FlightGear   128
   Speed Dreams   129
   Games for Kids   129
   Commercial Games   129
Playing Windows Games   130
References   130

Chapter 9  Managing Software   133

Ubuntu Software   133
Using Synaptic for Software Management   134
Staying Up-to-Date   137
Working on the Command Line   138
   Day-to-Day Usage   138
   Finding Software   141
   Using apt Instead of apt-get   142
Compiling Software from Source   143
   Compiling from a Tarball   143
   Compiling from Source from the Ubuntu Repositories   144
Configuration Management   145
   dotdee   145
Snappy Ubuntu Core   146
Using Snaps   146
References   147
Chapter 10  Command-Line Beginner’s Class   149
What Is the Command Line?   150
Accessing the Command Line   151
   Text-Based Console Login   152
   Logging Out   153
   Logging In and Out from a Remote Computer   153
User Accounts   154
Reading Documentation   155
   Using Man Pages   156
   Using apropros   156
   Using whereis   157
Understanding the Linux File System Hierarchy   157
   Essential Commands in /bin and /sbin   158
   Configuration Files in /etc   159
   User Directories: /home   159
   Using the Contents of the /proc Directory to Interact with the Kernel   160
   Working with Shared Data in the /usr Directory   161
   Temporary File Storage in the /tmp Directory   162
   Accessing Variable Data Files in the /var Directory   162
Navigating the Linux File System   162
   Listing the Contents of a Directory with ls   162
   Changing Directories with cd   164
   Finding Your Current Directory with pwd   165
Working with Permissions   165
   Assigning Permissions   166
   Directory Permissions   167
   Altering File Permissions with chmod   168
   File Permissions with umask   169
   File Permissions with chgrp   170
   Changing File Permissions with chown   170
   Understanding Set User ID, Set Group ID, and Sticky Bit Permissions   170
   Setting Permissions with Access Control Lists   171
Working with Files   173
   Creating a File with touch   173
   Creating a Directory with mkdir   173
   Deleting a Directory with rmdir   174
   Deleting a File or Directory with rm   175
   Moving or Renaming a File with mv   175
   Copying a File with cp   176
   Displaying the Contents of a File with cat   177
   Displaying the Contents of a File with less   177
   Using Wildcards and Regular Expressions   177
Working as Root   178
   Understanding and Fixing sudo   178
   Creating Users   181
   Deleting Users   182
   Shutting Down the System   182
   Rebooting the System   183
Commonly Used Commands and Programs   183
References   184
Chapter 11  Command-Line Master Class Part 1    185
Why Use the Command Line?   186
Using Basic Commands   187
   Printing the Contents of a File with cat   188
   Changing Directories with cd   189
   Changing File Access Permissions with chmod   191
   Copying Files with cp   191
   Printing Disk Usage with du   192
   Using echo   193
   Finding Files by Searching with find   193
   Searches for a String in Input with grep   196
   Paging Through Output with less   197
   Creating Links Between Files with ln   199
   Finding Files from an Index with locate   200
   Listing Files in the Current Directory with ls   200
   Listing System Information with lsblk, lshw, lsmod, and lspci   202
   Reading Manual Pages with man   203
   Making Directories with mkdir   204
   Moving Files with mv   204
   Renaming Files with rename   204
   Deleting Files and Directories with rm   205
   Sorting the Contents of a File with sort   205
   Printing the Last Lines of a File with tail   207
   Printing the Location of a Command with which   207
   Download Files with wget   207
References   208
Chapter 12  Command-Line Master Class Part 2   209
Redirecting Output and Input   209
stdin, stdout, stderr, and Redirection   211
Comparing Files   212
   Finding Differences in Files with diff   212
   Finding Similarities in Files with comm212
Limiting Resource Use and Job Control   213
   Listing Processes with ps   213
   Listing Jobs with jobs   214
   Running One or More Tasks in the Background   215
   Moving Jobs to the Background or Foreground with bg and fg   215
   Printing Resource Usage with top   216
   Setting Processes Priority with nice   218
Combining Commands   219
   Pipes   219
   Combining Commands with Boolean Operators   221
   Running Separate Commands in Sequence   222
   Process Substitution   222
Using Environment Variables   222
Using Common Text Editors   226
   Working with nano   227
   Working with vi   227
   Working with emacs   229
   Working with sed and awk   230
Working with Compressed Files   232
Using Multiple Terminals with byobu   233
Polite System Reset Using REISUB   234
Fixing an Ubuntu System That Will Not Boot   235
   Checking BIOS   235
   Checking GRUB   235
   Reinstalling GRUB   235
   Using Recovery Mode   236
   Reinstalling Ubuntu   236
Tips and Tricks   236
   Running the Previous Command   236
   Running Any Previous Command   237
   Running a Previous Command that Started with Specific Letters   237
   Running the Same Thing You Just Ran with a Different First Word   237
   Viewing Your History and More   237
   Doing Two or More Things   237
   Using Shortcuts   238
   Confining a Script to a Directory   238
   Using Coreutils   239
   Reading the Contents of the Kernel Ring Buffer with dmesg   239
References   240
Chapter 13  Managing Users   241
User Accounts   241
   The Super User/Root User   242
   User IDs and Group IDs   244
   File Permissions   244
Managing Groups   245
   Group Listing   245
   Group Management Tools   246
Managing Users   248
   User Management Tools   248
   Adding New Users   250
   Monitoring User Activity on the System   251
Managing Passwords   252
   System Password Policy   252
   The Password File   253
   Shadow Passwords   254
   Managing Password Security for Users   256
   Changing Passwords in a Batch   256
Granting System Administrator Privileges to Regular Users   257
   Temporarily Changing User Identity with the su Command   257
   Granting Root Privileges on Occasion: The sudo Command   259
Disk Quotas   262
   Implementing Quotas   262
   Manually Configuring Quotas   263
Related Ubuntu Commands   264
References   264
Chapter 14  Automating Tasks and Shell Scripting   265
Scheduling Tasks   265
   Using at and batch to Schedule Tasks for Later   265
   Using cron to Run Jobs Repeatedly   268
   Using rtcwake to Wake Your Computer from Sleep Automatically   270
Basic Shell Control   272
   The Shell Command Line   273
   Shell Pattern-Matching Support   274
   Redirecting Input and Output   275
   Piping Data   276
   Background Processing   277
Writing and Executing a Shell Script   277
   Running the New Shell Program   279
   Storing Shell Scripts for System-Wide Access   279
   Interpreting Shell Scripts Through Specific Shells   280
   Using Variables in Shell Scripts   281
   Assigning a Value to a Variable   282
   Accessing Variable Values   282
   Positional Parameters   282
   A Simple Example of a Positional Parameter   283
   Using Positional Parameters to Access and Retrieve
   Variables from the Command Line   284
   Using a Simple Script to Automate Tasks   284
   Built-In Variables   286
   Special Characters   287
   Using Double Quotes to Resolve Variables in Strings with Embedded Spaces   288
   Using Single Quotes to Maintain Unexpanded Variables   288
   Using the Backslash as an Escape Character   289
   Using the Backtick to Replace a String with Output   289
   Comparison of Expressions in pdksh and bash   290
   Comparing Expressions with tcsh   295
   The for Statement   299
   The while Statement   300
   The until Statement   302
   The repeat Statement (tcsh)   303
   The select Statement (pdksh)   303
   The shift Statement   304
   The if Statement   304
   The case Statement   305
   The break and exit Statements   307
   Using Functions in Shell Scripts   307
References   308
Chapter 15  The Boot Process   311
Running Services at Boot   311
Beginning the Boot Loading Process   312
   Loading the Linux Kernel   314
   System Services and Runlevels   315
   Runlevel Definitions   315
   Booting into the Default Runlevel   316
   Understanding init Scripts and the Final Stage of Initialization   316
   Controlling Services at Boot with Administrative Tools   317
   Changing Runlevels   318
   Troubleshooting Runlevel Problems319
   Starting and Stopping Services Manually   319
Using Upstart   319
systemd   320
Boot Repair   322
References   322
Chapter 16  System-Monitoring Tools   323
Console-Based Monitoring   323
   Using the kill Command to Control Processes   325
   Using Priority Scheduling and Control   326
   Displaying Free and Used Memory with free   327
   Disk Space   328
   Disk Quotas   329
   Checking Log Files   329
   Rotating Log Files   331
Graphical Process and System Management Tools   333
   System Monitor   334
   Conky   334
   Other   339
KDE Process- and System-Monitoring Tools   339
Enterprise Server Monitoring   340
   Landscape   340
   Other   340
References   340
Chapter 17  Backing Up   341
Choosing a Backup Strategy   341
   Why Data Loss Occurs   342
   Assessing Your Backup Needs and Resources   343
   Evaluating Backup Strategies   345
   Making the Choice   348
Choosing Backup Hardware and Media   348
   Removable Storage Media   348
   CD-RW and DVD+RW/-RW Drives   349
   Network Storage   349
   Tape Drive Backup   349
   Cloud Storage   350
Using Backup Software   350
   tar: The Most Basic Backup Tool   351
   The GNOME File Roller   353
   The KDE ark Archiving Tool   353
   Déjà Dup   354
   Back In Time   356
   Unison   358
   Using the Amanda Backup Application   358
   Alternative Backup Software   359
Copying Files   360
   Copying Files Using tar   360
   Compressing, Encrypting, and Sending tar Streams   361
   Copying Files Using cp   361
   Copying Files Using mc   362
   Using rsync   362
Version Control for Configuration Files   364
System Rescue   366
   The Ubuntu Rescue Disc   367
   Restoring the GRUB2 Boot Loader   367
   Saving Files from a Nonbooting Hard Drive   368
References   368
Chapter 18  Networking   369
Laying the Foundation: The localhost Interface   370
   Checking for the Availability of the Loopback Interface   370
   Configuring the Loopback Interface Manually   370
Checking Connections with ping, traceroute, and mtr   371
Networking with TCP/IP   374
   TCP/IP Addressing   374
   Using IP Masquerading in Ubuntu   376
   Ports   377
IPv6 Basics   378
Network Organization   380
   Subnetting   381
   Subnet Masks   381
   Broadcast, Unicast, and Multicast Addressing   382
Hardware Devices for Networking   382
   Network Interface Cards   382
   Network Cable   384
   Hubs and Switches   385
   Routers and Bridges   386
   Initializing New Network Hardware   387
Using Network Configuration Tools   389
   Command-Line Network Interface Configuration   389
   Network Configuration Files   394
   Using Graphical Configuration Tools   397
Dynamic Host Configuration Protocol   399
   How DHCP Works   399
   Activating DHCP at Installation and Boot Time   400
   DHCP Software Installation and Configuration   401
   Using DHCP to Configure Network Hosts   403
   Other Uses for DHCP   405
Wireless Networking   405
   Support for Wireless Networking in Ubuntu   405
   Advantages of Wireless Networking   407
   Choosing from Among Available Wireless Protocols   407
Beyond the Network and onto the Internet   408
Common Configuration Information   408
   Understanding PPP over Ethernet   410
   Configuring a PPPoE Connection Manually   411
Configuring Dial-Up Internet Access   412
Troubleshooting Connection Problems   413
References   414
Chapter 19  Remote Access with SSH, Telnet, and VNC   415
Setting Up a Telnet Server   415
Telnet Versus SSH   417
Setting Up an SSH Server   417
SSH Tools   417
   Using scp to Copy Individual Files Between Machines   418
   Using sftp to Copy Many Files Between Machines   418
   Using ssh-keygen to Enable Key-Based Logins   419
Virtual Network Computing   420
References   423
Chapter 20  Securing Your Machines   425
Understanding Computer Attacks   425
Assessing Your Vulnerability   427
Protecting Your Machine   428
   Securing a Wireless Network   429
   Passwords and Physical Security   429
   Configuring and Using Tripwire   430
   Devices   431
Viruses   431
Configuring Your Firewall   432
AppArmor   435
Forming a Disaster Recovery Plan   437
References   439
Chapter 21  Performance Tuning   441
Hard Disk   441
   Using the BIOS and Kernel to Tune the Disk Drives   442
   The hdparm Command   443
   File System Tuning   444
   The tune2fs Command   444
   The e2fsck Command   445
   The badblocks Command   445
   Disabling File Access Time   445
Kernel   445
Apache   446
MySQL   448
   Measuring Key Buffer Usage   448
   Using the Query Cache   449
   Miscellaneous Tweaks   451
   Query Optimization   451
References   452
Chapter 22  Kernel and Module Management   453
The Linux Kernel   454
   The Linux Source Tree   455
   Types of Kernels   457
Managing Modules   458
When to Recompile   460
Kernel Versions   461
Obtaining the Kernel Sources   462
Patching the Kernel   463
Compiling the Kernel   464
   Using xconfig to Configure the Kernel   467
   Creating an Initial RAM Disk Image   470
When Something Goes Wrong   470
   Errors During Compile   471
   Runtime Errors, Boot Loader Problems, and Kernel Oops   472
References   472

Chapter 23  Sharing Files and Printers   473

Using the Network File System   474
   Installing and Starting or Stopping NFS   474
   NFS Server Configuration   474
   NFS Client Configuration   475
Putting Samba to Work   476
   Manually Configuring Samba with /etc/samba/smb.conf   478
   Testing Samba with the testparm Command   481
   Starting, Stopping, and Restarting the smbd Daemon   481
   Mounting Samba Shares   482
Network and Remote Printing with Ubuntu   483
   Creating Network Printers   483
   Using the Common UNIX Printing System GUI   485
   Avoiding Printer Support Problems   486
References   488
Chapter 24  Apache Web Server Management   489
About the Apache Web Server   489
Installing the Apache Server   490
   Starting and Stopping Apache   491
Runtime Server Configuration Settings   492
   Runtime Configuration Directives   492
   Editing apache2.conf   493
   Apache Multiprocessing Modules   495
   Using .htaccess Configuration Files   496
File System Authentication and Access Control   498
   Restricting Access with Require   498
   Authentication   499
   Final Words on Access Control   501
Apache Modules   502
   mod_access   502
   mod_alias   502
   mod_asis   503
   mod_auth   503
   mod_auth_anon   503
   mod_auth_dbm   503
   mod_auth_digest   504
   mod_autoindex   504
   mod_cgi   504
   mod_dir and mod_env   504
   mod_expires   504
   mod_headers   504
   mod_include   505
   mod_info and mod_log_config   505
   mod_mime and mod_mime_magic   505
   mod_negotiation   505
   mod_proxy   505
   mod_rewrite   505
   mod_setenvif   506
   mod_speling   506
   mod_status   506
   mod_ssl   506
   mod_unique_id   506
   mod_userdir   506
   mod_usertrack   507
   mod_vhost_alias   507
Virtual Hosting   507
   Address-Based Virtual Hosts   507
   Name-Based Virtual Hosts   508
Logging   509
HTTPS   510
References   513
Chapter 25  Nginx Web Server Management   515
About the Nginx Web Server   515
Installing the Nginx Server   517
   Installing from the Ubuntu Repositories   517
   Building the Source Yourself   517
Configuring the Nginx Server   518
Virtual Hosting   521
Setting Up PHP   522
Adding and Configuring Modules   523
HTTPS   524
References   526
Chapter 26  Other HTTP Servers   527
lighttpd   527
Yaws   528
Cherokee   528
Jetty   529
thttpd   529
Apache Tomcat   530
References   530
Chapter 27 Remote File Serving with FTP   531
Choosing an FTP Server   531
   Choosing an Authenticated or Anonymous Server   532
   Ubuntu FTP Server Packages   532
   Other FTP Servers   532
Installing FTP Software   533
The FTP User   534
Configuring the Very Secure FTP Server   536
   Controlling Anonymous Access   537
   Other vsftpd Server Configuration Files   537
Using the ftphosts File to Allow or Deny FTP Server Connection   539
References   540
Chapter 28  Handling Email   541
How Email Is Sent and Received   541
   The Mail Transport Agent   542
   Choosing an MTA   544
   The Mail Delivery Agent544
   The Mail User Agent   545
Basic Postfix Configuration and Operation   546
   Configuring Masquerading   548
   Using Smart Hosts   549
   Setting Message Delivery Intervals   549
   Mail Relaying   550
   Forwarding Email with Aliases   550
Using Fetchmail to Retrieve Mail   551
   Installing Fetchmail   551
   Configuring Fetchmail   551
Choosing a Mail Delivery Agent   555
   Procmail   555
   Spamassassin   555
   Squirrelmail   556
   Virus Scanners   556
   Autoresponders   556
Alternatives to Microsoft Exchange Server   556
   Microsoft Exchange Server/Outlook Client   557
   CommuniGate Pro   557
   Oracle Beehive   557
   Bynari   558
   Open-Xchange   558
   Horde   558
References   558
Chapter 29  Proxying, Reverse Proxying, and Virtual Private Networks (VPN)   561
What Is a Proxy Server?   561
Installing Squid   562
Configuring Clients   562
Access Control Lists   563
Specifying Client IP Addresses   567
Sample Configurations   568
Virtual Private Networks (VPN)   570
   Setting Up a VPN Client   571
   Setting Up a VPN Server   573
References   575
Chapter 30  Administering Relational Database Services   577
A Brief Review of Database Basics   578
   How Relational Databases Work   580
   Understanding SQL Basics   582
   Creating Tables   582
   Inserting Data into Tables   583
   Retrieving Data from a Database   584
Choosing a Database: MySQL Versus PostgreSQL   586
   Speed   586
   Data Locking   586
   ACID Compliance in Transaction Processing to Protect Data Integrity   587
   SQL Subqueries   588
   Procedural Languages and Triggers   588
Configuring MySQL   588
   Setting a Password for the MySQL Root User   589
   Creating a Database in MySQL   590
Configuring PostgreSQL   592
   Initializing the Data Directory in PostgreSQL   592
   Creating a Database in PostgreSQL   593
   Creating Database Users in PostgreSQL   593
   Deleting Database Users in PostgreSQL   594
   Granting and Revoking Privileges in PostgreSQL   594
Database Clients   595
   SSH Access to a Database   595
   Local GUI Client Access to a Database   597
   Web Access to a Database   597
   The MySQL Command-Line Client   598
   The PostgreSQL Command-Line Client   600
   Graphical Clients   600
References   601
Chapter 31  NoSQL Databases   603
Key/Value Stores   606
   Berkeley DB   606
   Cassandra   607
   Memcached and MemcacheDB   607
   Redis   608
   Riak   608
Document Stores   608
   CouchDB   609
   MongoDB   610
   BaseX   610
Wide Column Stores   611
   BigTable   611
   HBase   611
Graph Stores   612
   Neo4j   612
   OrientDB   612
   HyperGraphDB   612
   FlockDB   613
References   613
Chapter 32  Lightweight Directory Access Protocol (LDAP)   615
Configuring the Server   616
   Creating Your Schema   616
   Populating Your Directory   617
Configuring Clients   619
   Evolution   620
   Thunderbird   621
Administration   621
References   622
Chapter 33  Linux Terminal Server Project (LTSP)   623
Requirements   624
Installation   627
Using LTSP   628
References   629
Chapter 34  Virtualization on Ubuntu   631
KVM   633
VirtualBox   637
VMware   639
Xen   639
References   639
Chapter 35  Ubuntu in the Cloud   641
Why a Cloud?   642
   Software as a Service (SaaS)   643
   Platform as a Service (PaaS)   643
   Infrastructure as a Service (IaaS)   643
   Metal as a Service (MaaS)   643
   Before You Do Anything   644
Deploy/Install Basics: Public, Private, or Hybrid?   644
Ubuntu Cloud and OpenStack   645
   Compute Infrastructure (Nova)   645
   Storage Infrastructure (Swift)   646
   Networking Service (Neutron)   646
   Identity Service (Keystone)   646
   Imaging Service (Glance)   647
   Dashboard (Horizon)   647
   Learning More   647
Juju   647
   Getting Started   648
   Charms   650
   The Juju GUI   652
   Juju Quickstart   653
   Juju on Mac OS X and Windows   653
   Mojo: Continuous Delivery for Juju   653
Snappy Ubuntu Core   653
Ubuntu Metal as a Service (MaaS)   653
Landscape   654
References   654
Chapter 36  Managing Sets of Servers   655
Juju   655
Puppet   656
Chef   656
CFEngine   656
Ansible   657
Landscape   657
References   657
Chapter 37  Name Serving with the Domain Name System (DNS)   659
Understanding Domain Names   661
   DNS Servers   661
   DNS Records   662
Setting Up a DNS Server with BIND   665
References   667

Chapter 38  Using Programming Tools for Ubuntu   669

Programming with Linux   670
Using the C Programming Project Management Tools Provided with Ubuntu   671
   Building Programs with make   671
   Using Makefiles   671
   Using the autoconf Utility to Configure Code   673
   Debugging Tools   674
Using the GNU C Compiler   675
Graphical Development Tools   676
   Using the KDevelop Client   676
   The Glade Client for Developing in GNOME   677
   Use an IDE or SDK   678
References   680
Chapter 39  Opportunistic Development   681
Version Control Systems   681
   Managing Software Projects with Git   682
   Managing Software Projects with Bazaar   683
   Managing Software Projects with Subversion   684
   Managing Software Projects with Mercurial   685
Introduction to Opportunistic Development   686
Launchpad   687
Ubuntu Make   688
Creating Snap Packages   689
Bikeshed and Other Tools   689
References   692
Chapter 40  Helping with Ubuntu Development   693
Introduction to Ubuntu Development   694
Setting Up Your Development System   695
   Install Basic Packages and Configure   695
   Create a Launchpad Account   696
   Set Up Your Environment to Work with Launchpad   696
Developing Apps and Scopes   698
Fixing Bugs and Packaging   698
Finding Bugs to Fix with Harvest   701
Masters of the Universe   701
References   702
Chapter 41  Helping with Ubuntu Testing and QA   703
Community Teams   703
   Ubuntu Testing Team   704
   QA Team705
Bug Squad   705
Test Drive   705
References   708
Chapter 42  Using Popular Programming Languages   709
Ada   710
Clojure   710
COBOL   711
D   712
Dart   712
Elixir   713
Erlang   713
Forth   713
Go   714
Fortran   714
Groovy   715
Haskell   715
Java   715
JavaScript   716
Lisp   716
Lua   717
Mono   717
OCaml   718
Perl   718
PHP   719
Python   719
Ruby   719
Rust   720
Scala   720
Scratch   720
Vala   720
References   721
Chapter 43  Beginning Mobile Development for Android   723
Introduction to Android   724
   Hardware   724
   Linux Kernel   724
   Libraries   724
   Android Runtime   724
   Application Framework   725
   Applications   725
Installing Android Studio   725
   Install Android Studio   725
   Install SDK Packages   725
Create Your First Application   727
References   728
Chapter 44  Developing for Ubuntu Mobile/Touch   729
Install the SDK   730
Create Your First Application   730
References   731
Index   733

Chapter 45  Using Perl Web
Using Perl with Linux
   Perl Versions
   A Simple Perl Program
Perl Variables and Data Structures
   Perl Variable Types
   Special Variables
   Comparison Operators
   Compound Operators
   Arithmetic Operators
   Other Operators
   Special String Constants
Conditional Statements: if/else and unless
   last and next
   do ..while and do ..until
Regular Expressions
Access to the Shell
Modules and CPAN
Code Examples
   Sending Mail
   Purging Logs
   Posting to Usenet
   Command-Line Processing
Chapter 46  Using Python
Python on Linux
The Basics of Python
   More on Strings
   Conditionals and Looping
Object Orientation
   Class and Object Variables
   Constructors and Destructors
   Class Inheritance
The Standard Library and the Python Package Index
Chapter 47  Using PHP
Introduction to PHP
   Entering and Exiting PHP Mode
   Escape Sequences
   Variable Substitution
   Conditional Statements
   Special Operators
   Including Other Files
Basic Functions
Handling HTML Forms


Matthew Helmke is an active member of the Ubuntu community. He served from 2006 to 2011 on the Ubuntu Forum Council, providing leadership and oversight of the Ubuntu Forums (www.ubuntuforums.org), and spent two years on the Ubuntu regional membership approval board for Europe, the Middle East, and Africa. He has written about Ubuntu for several magazines and websites, is a lead author of The Official Ubuntu Book, and coauthored The VMware Cookbook. He works as a technical writer for Canonical, Inc., documenting cloud- and DevOps-related software. Matthew first used Unix in 1987 while studying LISP on a VAX at the university. He has run a business using only free- and open-source software, has consulted, and has a master’s degree in Information Resources and Library Science from the University of Arizona. You can find out more about Matthew at matthewhelmke.com or drop him a line with errata or suggestions at matthew@matthewhelmke.com.

Andrew Hudson is a freelance journalist who specializes in writing about Linux. He has significant experience in Red Hat- and Debian-based Linux distributions and deployments and can often be found sitting at his keyboard tweaking various settings and config files just for the hell of it. He lives in Wiltshire, which is a county of England, along with his wife, Bernice, and their son, John. Andrew does not like Emacs. He can be reached at andy.hudson@gmail.com.

Paul Hudson is a recognized expert in open source technologies. He is a professional developer and full-time journalist for Future Publishing. His articles have appeared in MacFormat, PC Answers, PC Format, PC Plus, and Linux Format. Paul is passionate about free software in all its forms and uses a mix of Linux and BSD to power his desktops and servers. Paul likes Emacs. Paul can be contacted through http://hudzilla.org.