0% found this document useful (0 votes)
22 views36 pages

How To Install and Get Started With Ubuntu Desktop 18.04 LTS

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views36 pages

How To Install and Get Started With Ubuntu Desktop 18.04 LTS

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 36

yet another insignificant programming notes...

| HOME
TABLE OF CONTENTS (HIDE)
1. Introduction
2. Installing Ubuntu Desktop for Programmers/Developers
2.1 Ubuntu "Desktop" vs. Ubuntu "Server"
2.2 Installing Ubuntu Desktop alongside an Operating System
2.3 Post Installation - Updating Software
2.4 Errors that I have encountered
3. Getting Started with Ubuntu
3.1 "Unity" Desktop
3.2 Using Terminal - MUST READ Before You Start Programming
3.3 Applications and Utilities
4. APT for Managing Software
4.1 APT Tools
4.2 apt vs. apt-get/apt-cache
4.3 Upgrading (Maintaining) System
4.4 Installing/Removing Packages
4.5 APT Configuration Files
4.6 Checking the Status of the Installed Packages
5. How to Install JDK on Ubuntu
6. How to Install Eclipse on Ubuntu
7. How to Install NetBeans on Ubuntu
8. How to Install LAMP (Linux-Apache-MySQL-PHP) Server on Ubuntu
8.1 How to Install Apache 2.4 on Ubuntu 20.04LTS
8.2 (Advanced) Working with the UFW Firewall
8.3 (Advanced) How to Setup HTTPS for Apache 2.4 on Ubuntu 16.04LTS
8.4 How to Install MySQL 5.7 on Ubuntu 16.04LTS
8.5 How to install PHP 7 on Ubuntu 16.04LTS
8.6 How to install PhpMyAdmin
8.7 IDE for PHP Program Development
8.8 How to install xDebug PHP Extension
8.9 How to install Zend Debugger for PHP
8.10 How to install Firebug plugin for Firefox for debugging Client-side HTML/CSS/JavaScript
9. How to Install Tomcat 7/8 on Ubuntu
9.1 Install via APT
9.2 Install Manually
10. How to Install Postfix as a Send-Only Mail Server
11. How to Install SSH Server
12. C/C++ Programming on Ubuntu
13. Ubuntu's Tips and Tweaks
13.1 Terminal
13.2 User Administration
13.3 System Administration
13.4 "Nautilus" File Manager
13.5 gedit
13.6 Accessing Remote Server
13.7 Ubuntu Applications
13.8 Miscellaneous

How to install and Get Started


with Ubuntu Desktop 18.04 LTS
1. Introduction
Ubuntu is a distribution (or distros in short) of "GNU-Linux", just like RedHat, Fedora, SUSE, and Debian.
In other words, it is a packaging of "Linux Kernel + GNU System Programs and Utilities".
Ubuntu is open-source and free ("free" as in "free speech", not as in "free beer"). Ubuntu is sponsored
by Mark Shuttleworth, a south African entrepreneur who made his fortune in IT, via a company called
Canonical Inc. The term "ubuntu" means "humanity towards others" in southern African language.

Ubuntu runs the GNOME desktop manager. It includes the OpenOffice suite, Firefox Web browser,
Mozilla Thunderbird, Pidgin IM client, and a collection of tools and games. It uses Advanced Packaging
Tool (APT) - Debian's high-level package management system - for managing the software on the
system.
The first Ubuntu version was released in October 2004. Since then, there are two releases per year, in
April (YY-04) and October (YY-10), e.g., 14.04, 14.10. Some version are marked as LTS (Long Term
Support), which will be supported over the next 5 years, e.g., 14.04 LTS. LTS is recommended.
Ubuntu has many flavors: Ubuntu Desktop, Ubuntu Server, Ubuntu Cloud, Ubuntu Netbook, Ubuntu
Core, Kubuntu, EdUbuntu, Xubuntu, and others.

2. Installing Ubuntu Desktop for


Programmers/Developers
2.1 Ubuntu "Desktop" vs. Ubuntu "Server"
Ubuntu has many flavors, notably Ubuntu Desktop and Ubuntu Server. Ubuntu Desktop and Ubuntu
Server are almost identical, except that the Ubuntu Server does not come with the Windowing system,
i.e., no GUI applications. For programmers/developers, install the Ubuntu Desktop first; and then install
the server packages (such as LAMP). For production, use the Ubuntu Server without the Windowing
system.
2.2 Installing Ubuntu Desktop alongside an Operating System
There are various ways to install Ubuntu alongside an existing Operating Systems (such as Windows,
Mac OS):
1. Via a virtualization software such as VirtualBox or VMWare.
2. Dual-boot (or multi-boot), with each OS running in its own disk partition.
Installing Ubuntu Desktop via VirtualBox or VMWare
[TODO]
Dual-Boot Windows and Ubuntu
The installation procedure changes over the Windows/Ubuntu releases. Follow the instructions in the
Ubuntu download site, and google if you encounter problems.

The following procedure was tested on Windows 10 with Ubuntu Desktop 20.04 LTS in May 2020.
1. Assume that you have an operational Windows OS.
2. BACKUP!!!
3. Download the latest Ubuntu Desktop LTS (Long Term Support)
from https://www.ubuntu.com/download/desktop (e.g., ubuntu-20.04-desktop-
amd64.iso 2.5GB).
4. Read the latest installation guides available in the same download page.
5. Create a bootable USB stick (BIOS/UEFI compatible) using Rufus (a free and open source
USB stick writing tool):
a. Download the latest Rufus from https://rufus.ie/ (rufus-3.10.exe).
b. Insert a free USB stick (at least 4GB) ⇒ Run Rufus
a. Under "Drive Properties":
a. In "Device" ⇒ Select the USB stick
b. In "Boot Selection" ⇒ choose "FreeDOS" for
bootable
c. In "Partition Scheme" ⇒ MBR (default)
d. In "Target System" ⇒ BIOS (or UEFI-CSM)
(default)
b. Under "Format Options":
a. In "Volume Label": enter "Ubuntu 20_04 LTS"
b. In "File System" ⇒ FAT32 (default)
c. In "Cluster size" ⇒ 4096 bytes (default)
c. Click on the word "SELECT" and select the Ubuntu disk image
downloaded in the previous step (e.g., ubuntu-20.04-
desktop-amd64.iso).
d. Push "Start" button.
6. Free disk space to install Ubuntu:
a. Right-click Start button ⇒ Command Prompt (Admin) to start the CMD
shell ⇒ Enter "diskmgmt.msc" to run the Disk Management utility.
b. Select a drive with free space (e.g., C:) ⇒ Right-click ⇒ Shrink Volume ⇒
Enter the amount to shrink (at least 20GB or 20000MB, more if you can
afford e.g., 64GB or 65536MB) ⇒ Shrink ⇒ Reboot
7. Disable Windows "Fast Boot": Control Panel ⇒ System and Security ⇒ Power Options ⇒
Choose "what the power buttons do" ⇒ Change settings that are currently unavailable
⇒ Uncheck "Turn on fast startup" ⇒ Save changes ⇒ Restart
8. Change the boot order in your BIOS/UEFI setup to enable booting from USB: Power-On
⇒ Hit a hotkey to enter BIOS/UEFI Setup (ESC, F12, F10 or F2 depending on your
computer) ⇒ Look for "Boot order" and check/change the settings.
9. Now you are ready to install Ubuntu from the bootable USB stick. Read "Install Ubuntu"
@ https://www.ubuntu.com/download/desktop/install-ubuntu-desktop.
10. Boot from the Bootable USB stick:
a. In Boot menu ⇒ Using "tab" key to choose "Install Ubuntu"
b. In "Keyboard Layout" ⇒ Choose your preferences.
c. In "Wireless" ⇒ Connect to your wifi network.
d. In "Updates and other software" ⇒ Use the defaults
e. In "Installation Type" ⇒ choose "Something else" (so that you can
customize your disk partition for Ubuntu).
f. I installed Ubuntu in one single partition (without the swap partition as I
have 16GB of RAM, also without a separate "home" partition).
Select "free space" ⇒ Hit "+" button.
In "Create Partition" menu, Set:
a. Size = all free space (default)
b. Type for the new partition = Primary (default)
c. Location for the new partition = Beginning (default)
d. Use as = EXT4 journaling file system (default)
e. Mount point = choose "/" (for root)
Push "Install Now" button.
g. Choose your region.
h. Pick up a username and password for your administrator (superuser or
sudo) account.
a. Your name = same as username (lowercase letters, digits,
without space or special characters; root is already used)
b. Your computer name = your chosen computer name (e.g.,
myUbuntu)
i. Remove USB stick and reboot.

2.3 Post Installation - Updating Software


Run the Software Update
// Update (Re-synchronize) your software list (or Package Index Files).
// This does not run any actual update.
$ sudo apt update
// or "sudo apt-get update"

// Run actual upgrade


$ sudo apt upgrade
// or "sudo apt-get upgrade"

Alternatively, you can run "Ubuntu Software" ⇒ "Updates".


Disable the Guest Session Account in Login Screen (for Ubuntu 16.04)
LightDM keeps its configuration files in /etc/lightdm/lightdm.conf.d . To disable guest session
account, create a configuration file called "50-no-guest.conf" with these lines:

[SeatDefaults]
allow-guest=false

You could use these commands:

sudo gedit /etc/lightdm/lightdm.conf.d/50-no-guest.conf


// Enter the above lines

2.4 Errors that I have encountered


Error: Windows 10 does not show up in the GRUB Boot menu after installing
Ubuntu
Boot into Ubuntu. Start a terminal and issue these commands:

sudo update-grub
sudo grub-install /dev/[Windows Boot partition e.g., sda1]

The first command could fix the problem. The second command is used to manually add Windows
partition into the GRUB boot menu.
How to disable default OS in GRUB boot menu
GRUB maintains its configuration in /etc/default/grub.

$ sudo gedit /etc/default/grub


// GRUB_TIMEOUT="10" specifies the default timeout.
// Set to -1 will make GRUB wait indefinitely.
$ sudo update-grub

Error: Time resets to UTC after boot


In "/etc/default/rcS":

# assume that the BIOS clock is set to UTC time (recommended)


UTC=no
3. Getting Started with Ubuntu
Read the Documentation available at https://help.ubuntu.com.
3.1 "Unity" Desktop
Ubuntu uses the "Unity" desktop, which is designed "to minimize distractions, give you more room to
work, and help you get things done". I highlight some of the key features of Unity desktop here:
• Launcher : On the left of the screen for you to launch commonly-used applications
(similar to Windows' taskbar and Mac's dock). Apps that aren't currently running
have translucent icon squares. When you start an app, the icon square pulses. When an
app is running, the icon square becomes opaque. Small white triangles to the left of the
icon square indicates the number of windows opened. Two triangles means that two
windows opened. Three triangles means three or more windows. A small white triangle to
the right of the icon square indicates the current app.
• Dash : The top icon in the launcher (painted with the Ubuntu logo) for finding programs
and files. It can also be started using the "super" key (or "Windows" key). The Dash is
designed to make it easier to find, open, and use apps, files, music, and more. The
various lenses (applications, files, etc.) at the bottom allow you to focus the search on a
particular resource.
• Panel : The bar on top of the screen is called the panel. When you move the mouse
pointer over it, it shows the App Menus for the current application on its left. The panel
also houses the Status Indicators on its right.
• Status Indicators : comprising mail, battery, bluetooth, network, sound, clock, and
system menus.
• Overlay scrollbars : The scroll bars appear as thin orange strips at the right and
bottom edge of the window to conserve space. You can move the mouse pointer over it
to reveal the "Thumb Slider". You can click the top half of the thumb slider to scroll one
page up; or click the bottom half to scroll one page down. You can drag the thumb slider
to position the page.
• HUD (Heads Up Display) : HUD is a search-based alternative to traditional menus.
It can be activated via the "alt" key. Instead of clicking and selecting from the menus, you
can type the search phrase (such as "replace") to locate the menu item.
• Workspaces : Ubuntu provides four workspace, by default. You can group your
applications in different workspaces; and use the "Workspace Switcher" to switch between
workspaces.
3.2 Using Terminal - MUST READ Before You Start Programming
Programmers use "Terminal" to issue commands, instead of the graphical user interface - which is
meant for common users.
You MUST have knowledge on the File system and using the Terminal. Read "Programmer's Survival
Guide for Macs and Ubuntu".
3.3 Applications and Utilities
LibreOffice : The default Ubuntu's productivity suite, which is a variant of OpenOffice (currently
owned by Apache). It includes:
•Writer : word processor, similar to Microsoft Word.
•Calc : spreadsheet, similar to Microsoft Excel.
• Writer : word processor, similar to Microsoft Word.
• Impresss : Presentation program, similar to Microsoft Powerpoint.
• Math : Math formula editor.
• Base : Database application, similar to Microsoft Access.
• Draw : Graphics application for creating images.
• Dia : Technical diagram drawing editor, similar to Microsoft Visio.
• Planner : Project management application, similar to Microsoft Project.
GEdit Text Editor : The GNU gedit is the default text editor in Ubuntu. [TODO] more.
Screenshot : Press PrintScreen key to capture the entire screen; alt+PrintScreen key to capture the
current window. The images are captured in PNG. Alternatively, use the dash to search for "Screenshot".
You can set the area of screenshot.
PDF Documents : Evince is the default PDF reader (you can also install the Acrobat Reader). To edit
PDF document, you can install an extension called PDF Import to LibreOffice, or use programs such as
PDF Editor (pdfedit).
PDF Printer : You can install CUPS PDF printer via:
$ sudo apt install cups-pdf

The default "printing location" is at ~/PDF. You can configure the printer setting via "System Setting"
⇒ Printers.

4. APT for Managing Software


Ubuntu adopts Debian's Advanced Packaging Tool (APT) for software package management of ".deb"
package. Other Linux distros, such as Red Hat, uses RPM Package Manager.

APT can properly handle the dependencies. It automatically finds and downloads all the dependencies
of the packages to be installed. It can also resume installation after an interruption.

4.1 APT Tools


There are a few sets of toots that can be used to interface with Debian's Advanced Packaging Tool
(APT):
1. apt-get/apt-cache: the older tool.
2. apt: The newer tool (since Ubuntu 14.04) combines the most commonly used
commands from apt-get and apt-cache. It is meant to be pleasant for end users.
3. aptitude: supports both GUI and command-line.
4. dpkg: The dpkg (Debian Package Manager) is the low level tool for installing, removing
and providing information about '.deb' packages.
Read the manual pages via "man apt-get", "man apt-cache", "man apt" and "man dpkg".
4.2 apt vs. apt-get/apt-cache
The newer apt tool, which combines some of the most widely used features from apt-get/apt-cache,
leaving aside obscure and seldom used features, is recommended. It can also manage "apt.conf" file.
The following table compares the apt and apt-get/apt-cache commands
Task apt apt-get/
Maintenance apt update apt-get update
apt upgrade apt-get upgrade
apt full-upgrade apt-get dist-upgra
apt autoremove apt-get autoremove
Install/Remove Packages apt install <package> apt-get install <p
apt remove <package> apt-get remove <pa
apt purge <package> apt-get purge <pac
Query apt search apt-cache search
apt show apt-cache show
apt list -
apt edit-source -
4.3 Upgrading (Maintaining) System
To perform software upgrade for your system:
1. Refresh the software repositories index:

2. $ sudo apt update


3. // or

// $ sudo apt-get update


The update option resynchronizes your package index files from their sources. The list
of available sources are fetched
from /etc/apt/sources.list and /etc/apt/sources.list.d/. This command does
not actually install any upgrades.
Take note that 'sudo' is needed for most of the apt commands for writing to the
system files and directories.
4. Upgrade your software:

5. // Upgrade within the same release


6. $ sudo apt upgrade
7. // or
8. // $ sudo apt-get upgrade
9.
10. // Upgrade to the latest release
11. $ sudo apt full-upgrade
12. // or (for Ubuntu)
13. // $ do-release-upgrade
14. // or

// $ sudo apt-get dist-upgrade


The apt upgrade installs newer versions of installed packages, but does not remove or
add packages or upgrade to the new release. It will not work if the newer version requires
addition or removal of packages. On the other hand, the apt full-upgrade may
remove or add packages to resolve dependencies, and install the new release.
The apt upgrade is designed to install security and simple package upgrade. Use apt
upgrade for your production system during normal maintenance!
15. You can remove the unwanted packages via:

16. $ sudo apt autoremove


17. // or

// $ sudo apt-get autoremove

4.4 Installing/Removing Packages


When you type a command to execute an application, such as "mysql" or "g++", which is NOT installed
in the system, Ubuntu is smart enough to suggest packages that contain such command. For example,
$ ttt
The program 'ttt' is currently not installed. You can install it by typing:
sudo apt install ttt
Note: Starting from Ubuntu 16.04, Ubuntu has switched its prompting message to apt from apt-get.
Installing a Package: apt install
To install new software, use "apt install".
// Syntax:
$ sudo apt install <package> // 'sudo' needed
// or
// $ sudo apt-get install <package>

// Example: Installing MySQL


$ sudo apt install mysql-server
It lists all the dependencies. It also lists the recommended packages, and suggested packages (less
important than recommended packages). It will install the dependencies automatically. But you need
to explicitly install the recommended and suggested packages.
Reinstalling a Package
To reinstall a package:

// Syntax:
$ sudo apt install --reinstall <package>
// or
// $ sudo apt-get install --reinstall <package>

Removing a Package: apt remove/purge


You can use "apt remove" or "apt purge" to remove installed package. Beware that all the packages
that rely on this package will also be removed, as they are no longer valid. For example,
// Syntax:
$ sudo apt remove <package>
// or
// $ sudo apt-get remove <package>

$ sudo apt purge <package> // Also purge the configuration files in "/etc"
$ sudo apt remove --purge <package> // Same as above
// or
// $ sudo apt-get purge <package>

4.5 APT Configuration Files


APT's configuration is stored in /etc/apt.
• /etc/apt/sources.list and /etc/apt/sources.list.d/ : locations of software
repositories to fetch packages. You can also configure via the GUI "Software Sources".
• /etc/apt/apt.conf: APT configuration file.
APT stores temporary files in /var/cache/apt and /var/lib/apt. You can use command "apt clean"
or "apt-get clean" to clean the cached .deb files.
4.6 Checking the Status of the Installed Packages
There are several ways to list information of installed packages:
1. Use high-level apt tool (recommended), e.g.,
2. $ apt list --installed
3. // List ALL installed packages, one per line
4. $ apt list --installed <package-name-pattern>
5. // List all installed packages matching the pattern
6. $ apt show <package-name-pattern>
7. // Show details of packages matching the pattern
8. $ apt search <regex>

// Show all available packages whose names or descriptions matches the


regex
9. Use the apt-cache, e.g.,
10. $ apt-cache show <package-name-pattern>
11. // Show details for matching packages
12.
13. $ apt-cache search <regex> --names-only
14. // Show all available packages whose name matches the regex, one per
line
15. $ apt-cache search <regex>

// Show all available packages whose names or descriptions matches the


regex
16. Use low-level dpkg (Debian Package Manager) command with option:
o --get-selections: List all installed packages
o --list (or -l) <package-name-pattern>: List packages matching given
pattern
o --status (or -s) <package-name>: Report status of specified package
o --listfiles (or -L) <package-name>: List files installed to your system
from package-name
o --search (or -S) <filename-search-pattern>: Search for filenames
from all installed packages
For example:
$ dpkg --get-selections
// List ALL installed packages, one per line
$ dpkg --get-selections | grep apache*
// List installed packages matching the pattern
$ dpkg --list
// List ALL installed packages, one per line. More columns that --get-
selections
$ dpkg --list | grep apache*
// List installed packages matching the pattern
$ dpkg --list apache*
// List installed/available packages matching the pattern
$ dpkg --status apache2
// Show status of a particular package
$ dpkg --filenames apache2
// List all files for a particular package
$ dpkg --search apache*
// List all matched files

5. How to Install JDK on Ubuntu


Read "How to Install JDK on Ubuntu".
6. How to Install Eclipse on Ubuntu
Read "How to Install Eclipse for Ubuntu".
Tips and Tricks on using Eclipse
Read "Eclipse How-To".
7. How to Install NetBeans on Ubuntu
Read "How to Install NetBeans on Ubuntu".
8. How to Install LAMP (Linux-Apache-MySQL-PHP)
Server on Ubuntu
8.1 How to Install Apache 2.4 on Ubuntu 20.04LTS
Step 1: Install Apache 2.4
Open a new Terminal and issue these commands:

$ sudo apt update


$ sudo apt install apache2
......
The following NEW packages will be installed:
apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1
libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0
......

Step 2: Verify Installation


// Show all package related to apache
$ dpkg --get-selections | grep apache
apache2 install
apache2-bin install
apache2-data install
apache2-utils install

// Show details of apache2 package


$ dpkg --status apache2
......
Version: 2.4.18-2ubuntu3.1
.......

// List the files of apache2 package


$ dpkg --listfiles apache2
.......

$ which apache2
/usr/sbin/apache2
$ whereis apache2
apache2: /usr/sbin/apache2 /etc/apache2 /usr/lib/apache2 /usr/share/apache2
/usr/share/man/man8/apache2.8.gz
$ man apache2
......
As shown in the above output, the Apache 2 server program "apache2" (called "httpd" in Apache 1) is
installed in /usr/sbin (System Software Binaries).
Step 3: Configure Apache 2.4
Apache 2.4 keeps its configuration files in /etc/apache2 directory, which includes:
• apache2.conf: The main configuration file, which includes ports.conf, mods-
enabled/*.load, mods-enabled/*.conf, conf-enabled/*.conf, and sites-
enabled/*.conf.
• ports.conf: Defines the server's listening TCP port numbers. The default configuration
defines port 80 for HTTP and port 443 for HTTPS.
• sites-available/*.conf and sites-enabled/*.conf: for managing application web
sites. All *.conf in sites-enabled are included in apache2.conf.
To create a new site, you should create a configuration in sites-available; and use
helper utility a2ensite to make a symlink to the sites-enabled (instead of duplicating
the file). Similarly, use helper utility a2dissite to remove a site from sites-
enabled (which removes the symlink).
The "000-default.conf" provided (called "default.conf" in Apache 2.2), which is
enabled by default, defines a virtual host:
o Listening at port 80 (enabled in "port.conf").
o DocumentRoot at "/var/www/html" (or "/var/www" in Apache 2.2).
• mods-available/*.load|*.conf and mods-enabled/*.load|*.conf: for manage
modules. Use helper utilities a2enmod or a2dismod to enable or disable a module via
symlinking.
• conf-available/*.conf and conf-enabled/*.conf: for additional configuration (such
as phpMyAdmin). Use helper utilities a2enconf or a2disconf to enable or disable a
configuration via symlinking.
• envvars: defines the environment variables used by Apache 2, such as
o APACHE_RUN_USER: www-data
o APACHE_RUN_GROUP: www-data
o APACHE_RUN_DIR: /var/run/apache2
o APACHE_LOG_DIR: /var/log/apache2
A special user www-data is used to run the apache server. This user www-data should have
"r" permission to all the files in the public www directory and "rx" permission to its
subdirectories. It should also have "rx" permission to all the parent-directories leading to
the public www directory.
• magic: defines the MIME types.
Step 4: Start/Shutdown Apache Server
Apache is installed as a service called "apache2" (configured at "/etc/init.d/apache2"). The Apache
server is started automatically after the installation.

You can restart/stop/start and check the status of Apache via:

// service <service-name> start|stop|restart|reload|status


$ sudo service apache2 stop
$ sudo service apache2 start
$ sudo service apache2 restart
// Stop and start the service
$ sudo service apache2 reload
// Reload the configuration file without shutdown and restarting
$ sudo service apache2 status
// Show the status of the service

// OR (same as above - run the script directly)


// /etc/init.d/<service-name> start|stop|restart|reload
$ sudo /etc/init.d/apache2 stop
$ sudo /etc/init.d/apache2 start
$ sudo /etc/init.d/apache2 restart
$ sudo /etc/init.d/apache2 reload
$ sudo /etc/init.d/apache2 status

// OR (same as above - use systemctl utility)


systemctl start|stop|restart|reload|status <service-name>
$ sudo systemctl stop apache2
$ sudo systemctl start apache2
$ sudo systemctl restart apache2
$ sudo systemctl reload apache2
$ sudo systemctl status apache2
Alternatively, you can use utility apache2ctl to start/stop the Apache server:
$ apache2ctl help
Usage: /usr/sbin/apache2ctl start|stop|restart|graceful|graceful-
stop|configtest|status|fullstatus|help

$ sudo apache2ctl stop


$ sudo apache2ctl start
$ sudo apache2ctl restart

$ man apache2ctl

To check the apache process:

$ ps aux | grep apache


root 3950 0.0 0.0 319488 16160 ? Ss 19:48 0:00 /usr/sbin/apache2 -k
start
www-data 3954 0.0 0.0 319772 9028 ? S 19:48 0:00 /usr/sbin/apache2 -k
start
www-data 3955 0.0 0.0 319772 8816 ? S 19:48 0:00 /usr/sbin/apache2 -k
start
......
The apache parent process is started by root; the child processes are run by www-data.
Step 4: Accessing the Apache 2.4 Server
Start a web browser (such as Firefox) and issue URL http://localhost.
Take note that the default enabled configuration "000-default.conf" defines a virtual host listening
at port 80 with DocumentRoot at "/var/www/html".
Resolving Warning Message "AH00558: apache2: Could not reliably
determine the server's fully qualified domain name"
The default configuration "000-default.conf" does not define the 'ServerName' (commented out),
which causes error message "AH00558: apache2: Could not reliably determine the server's fully
qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this
message".
To resolve this warning message, set 'ServerName' to your server's domain name or IP address. Edit
the "000-default.conf" (using graphical gedit or console nano editor (sudo nano 000-
default.conf)) and restart the apache2 (sudo service apache2 restart).

Note: You can verify the configuration via:

$ sudo apache2ctl configtest

8.2 (Advanced) Working with the UFW Firewall


The Ubuntu's UFW (uncomplicated firewall) firewall is disabled by default. To check:

$ sudo ufw status


Status: inactive

You can enable UFW firewall via:

$ sudo ufw enable


Firewall is active and enabled on system startup
$ sudo ufw status
Status: active
$ sudo ufw disable
Firewall stopped and disabled on system startup
$ sudo ufw status
Status: inactive

If your firewall is active, it must allow HTTP and HTTPS to run a server. You can check your UFW Firewall
application profiles via:

$ sudo ufw app list


Available applications:
Apache
Apache Full
Apache Secure
......

// Display the application profiles


$ sudo ufw app info "Apache Full"
Ports:
80,443/tcp

$ sudo ufw app info "Apache"


Port:
80/tcp

$ sudo ufw app info "Apache Secure"


Port:
443/tcp

// Allow the "Apache Full" profile


$ sudo ufw allow in "Apache Full"
Rules updated
Rules updated (v6)

$ sudo ufw enable


Firewall is active and enabled on system startup

$ sudo ufw status


Status: active

To Action From
-- ------ ----
Apache Full ALLOW Anywhere
Apache Full (v6) ALLOW Anywhere (v6)

// Allow a specific port number


$ sudo ufw allow 22/tcp
Rule added
Rule added (v6)

$ sudo ufw status


Status: active
To Action From
-- ------ ----
Apache Full ALLOW Anywhere
22/tcp ALLOW Anywhere
Apache Full (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)

8.3 (Advanced) How to Setup HTTPS for Apache 2.4 on Ubuntu


16.04LTS
Step 1 : Enable the SSL module (which is not loaded by default):
$ sudo a2enmod ssl
// Check
$ ll /etc/apache2/mods-enabled
......
lrwxrwxrwx 1 root root 26 Jan 17 23:55 ssl.conf -> ../mods-available/ssl.conf
lrwxrwxrwx 1 root root 26 Jan 17 23:55 ssl.load -> ../mods-available/ssl.load
This command create symlinks for ssl.conf and ssl.load from "/etc/apache2/mods-available" to
"/etc/apache2/mods-enabled". During startup, mods-enabled is loaded.
Step 2 : Study the default SSL configuration file /etc/apache2/sites-available/default-
ssl.conf. It defines a virtual host listening at port 443 (the HTTPS default port number) with these
directives:

DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

During the installation, a self-signed certificate "/etc/ssl/certs/ssl-cert-snakeoil.pem" was


created based on your hostname, with the key file stored in "/etc/ssl/private/ssl-cert-
snakeoil.key", as reflected in the above configuration. You can use this certificate (and hence this
configuration) to run your HTTPS.
Read: "/usr/share/doc/apache2/README.Debian.gz " (using File Explorer).
• If you need to recreate this certificate (e.g. after you have changed /etc/hosts), run:
$ sudo make-ssl-cert generate-default-snakeoil --force-overwrite

• If you want to create a certificate with different host name, you can use:

$ sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /path/to/cert-file.crt


This will ask you for the hostname and place both SSL key and certificate in the
file /path/to/cert-file.crt. Use this file for the SSLCertificateFile, and you don't
need the SSLCertificateKeyFile in this case as it also contains the key. The
file /path/to/cert-file.crt should only be readable by root and suggested to keep
in /etc/ssl/private. For example,
$ sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/private/my-
apache-ssl.crt
// In the common name, enter the server's DNS name or IP address. E.g,
// Common Name (e.g. server FQDN or YOUR name) []:127.0.0.1
[Alternative, you can use OpenSSL to generate a private key file and a certificate. See
"Create a Self-Signed Certificate"].
The SSL key file should only be readable by root, the certificate file may be globally
readable. These files are read by the Apache parent process which runs as root. Therefore
it is not necessary to make the files readable by the user www-data.
Step 3 : Activate the HTTPS site.
We shall use the default configuration file default-ssl.conf and the default certificate and key file.

To activate the SSL site:

// Run helper utility a2ensite to enable the site by symlinking to "/etc/apache2/sites-


enabled"
$ sudo a2ensite
// choose 'default-ssl'

// Check
$ ll /etc/apache2/sites-enabled
......
lrwxrwxrwx 1 root root 35 Jan 18 00:39 default-ssl.conf -> ../sites-available/default-
ssl.conf

// Reload the configuration file (without restarting)


$ sudo service apache2 reload
// or restart (stop and start)
$ sudo service apache2 restart

Step 4 : You can access the site with a web browser via https://localhost.

Warning Message "[warn] RSA server certificate CommonName (CN) ... does
NOT match server name!?"
In the config file, add a ServerName directive right below the ServerAdmin under <VirtualHost>:
ServerName your-hostname-or-IPaddr

Switching between HTTPS and HTTP?


Switching between HTTPS and HTTP is not really needed, as HTTPS's overhead is not very high (other
than the initial hand-shake). Otherwise, you need to pass session from HTTPS (login) to HTTP.
Creating Your own Configuration File
Clone the default-ssl.conf:
$ cd /etc/apache2/sites-available
// Duplicate from default-ssl
$ cp default-ssl.conf my-ssl.conf
// Edit configuration (using console nano editor or graphical gedit if available)
$ sudo nano my-ssl.conf

Tailor the following directives:

// Set the root directory your webapp


DocumentRoot ......

// Define the permissions of the root directory


<Directory ...... >
......
</Directory>

// Check to ensure that SSL is on


SSLEngine on

// Set the certificate (no key file needed if you use make-ssl-cert)
SSLCertificateFile /etc/ssl/private/my-apache-ssl.crt
# SSLCertificateKeyFile /etc/ssl/private/apache.key
If you are not using the default HTTPS port of 443, you need to add the port number to
"/etc/apache2/ports.conf" and access the SSL site via https://localhost:port.
8.4 How to Install MySQL 5.7 on Ubuntu 16.04LTS
Step 1: Install MySQL
Open a new Terminal and issue this command:

$ sudo apt update


$ sudo apt install mysql-server
......
The following NEW packages will be installed:
libaio1 libevent-core-2.0-5 libhtml-template-perl mysql-client-5.7
mysql-client-core-5.7 mysql-common mysql-server mysql-server-5.7
mysql-server-core-5.7
......
The installer will prompt for the password for the MySQL root user. Set a password for root, and
remember this password.
Step 2: Verify the MySQL Installation
// Show packages relating to mysql
$ dpkg --get-selections | grep mysql
mysql-client-5.7 install
mysql-client-core-5.7 install
mysql-common install
mysql-server install
mysql-server-5.7 install
mysql-server-core-5.7 install
// Check the details of a package
$ dpkg --status mysql-server
......
Version: 5.7.16-0ubuntu0.16.04.1
.......

// List the installed files of a package


$ dpkg --listfiles mysql-server
.......

// Check the location of "mysqld" (MySQL server deamon)


$ which mysqld
/usr/sbin/mysqld
$ whereis mysqld
mysqld: /usr/sbin/mysqld /usr/share/man/man8/mysqld.8.gz
$ man mysqld // Read the manual

// Check the location of "mysql" (MySQL command-line client)


$ which mysql
/usr/bin/mysql
$ whereis mysql
mysql: /usr/bin/mysql /etc/mysql /usr/lib/mysql /usr/bin/X11/mysql /usr/share/mysql
/usr/share/man/man1/mysql.1.gz
$ man mysql // Read the manual
As seen from the above output, the MySQL server daemon "mysqld" is installed at "/usr/sbin"
(System-Software Binaries). The MySQL command-line client "mysql" and utilities such as
"mysqladmin" and "mysqldump" are located at "/usr/bin" (Application Software Binaries).
Step 3: Configure MySQL Server
MySQL reads the startup options from the files shown below, in the specified order (top files are read
first, files read later take precedence) (Reference: http://dev.mysql.com/doc/refman/5.7/en/option-
files.html)
1. /etc/my.cnf
2. /etc/mysql/my.cnf
3. SYSCONFDIR/my.cnf
4. $MYSQL_HOME/my.cnf (server only)
5. The file specified in --defaults-extra-file startup option, if any
6. ~/.my.cnf
7. ~/.mylogin.cnf (client only)
The installation default /etc/mysql/my.cnf includes
directories /etc/mysql/conf.d/ and /etc/mysql/mysql.conf.d/.
The /etc/mysql/conf.d/mysql.cnf is empty. Hence, the main configuration file
is /etc/mysql/mysql.conf.d/mysqld.cnf.
Browse through /etc/mysql/mysql.conf.d/mysqld.cnf :

[mysqld]
user = mysql
port = 3306
basedir = /usr
datadir = /var/lib/mysql
......
log_error = /var/log/mysql/error.log
......

• A special user called "mysql" is created to run the MySQL server.


• The server runs on the default port number of 3306.
• The data directory is located at /var/lib/mysql (owned by mysql:mysql).
• The error log is located at /var/log/mysql/error.log.
Step 4: Start/Shutdown MySQL Server (mysqld)
MySQL is run as a service called "mysql" (configured at "/etc/init.d/mysql"), which is started
automatically after boot. To start/stop/restart mysql, you could:
$ sudo service mysql start
$ sudo service mysql stop
$ sudo service mysql restart
// Stop and start
$ sudo service mysql status
// Show the status
MySQL server will be started automatically after the installation. You CANNOT start another instance!
To check the mysqld process:
$ ps aux | grep mysqld
mysql 1113 0.0 0.3 484432 50024 ? Ssl 18:33 0:08 /usr/sbin/mysqld

Step 5: Start/Stop MySQL Command-line Client (mysql)


To start a MySQL client:

$ mysql -u root -p
// Enter the password for the root user you have set in Step 1

mysql> select user, host, authentication_string from mysql.user;


+------------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+------------------+-----------+-------------------------------------------+
| root | localhost | *1556A6F65259CE3FBEA8489096F7797B4E0D5BEC |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *4DAD7B857498382CA8EB2EEF56E0EF9269D9FF6B |
+------------------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

mysql> exit

MORE on MySQL
READ "MySQL" section.
(For Java Programmers) Install MySQL JDBC Driver
1. Download the latest JDBC driver from http://www.mysql.com/downloads ⇒ MySQL
Connectors ⇒ Connector/J ⇒ Compressed TAR archive (e.g., mysql-connector-java-
{5.x.xx}.tar.gz, where {5.x.xx} is the latest release number).
2. Double-click on the downloaded TAR file (at ~/Downloads) to expand into folder
"mysql-connector-java-{5.x.xx}".
3. Open the expanded folder. Copy the JAR file "mysql-connector-java-{5.x.xx}-
bin.jar" to JDK's extension directory at
"/usr/local/java/jdk1.8.0_{xx}/jre/lib/ext ".
4. $ cd /usr/local/java/jdk1.8.0_{xx}/jre/lib/ext

$ sudo cp ~/Downloads/mysql-connector-java-{5.x.xx}/mysql-connector-java-
{5.x.xx}-bin.jar .

The mysql_secure_installation script


The installation provide a script /usr/bin/mysql_secure_installation to tailor the security options.

[TODO] more

8.5 How to install PHP 7 on Ubuntu 16.04LTS


To install PHP 7

$ sudo apt install php libapache2-mod-php php-mcrypt php-mysql


......
The following NEW packages will be installed:
libapache2-mod-php libapache2-mod-php7.0 libmcrypt4 php php-common
php-mcrypt php-mysql php7.0 php7.0-cli php7.0-common php7.0-json
php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-readline

// Show all package related to php


$ dpkg --get-selections | grep php
libapache2-mod-php install
libapache2-mod-php7.0 install
php install
php-common install
php-mcrypt install
php-mysql install
php7.0 install
php7.0-cli install
php7.0-common install
php7.0-json install
php7.0-mcrypt install
php7.0-mysql install
php7.0-opcache install
php7.0-readline install

// Show details a package


$ dpkg --status php7.0
......

// List the files of a package


$ dpkg --listfiles php
......
PHP supports Apache interface and Command-line interface (CLI). PHP executable is available in
"/usr/bin/php" (link to "/usr/bin/php5" via alternatives as shown below):
$ which php
/usr/bin/php
$ ls -ld /usr/bin/php
lrwxrwxrwx 1 root root 21 Sep 24 2013 php -> /etc/alternatives/php
$ ls -ld /etc/alternatives/php
lrwxrwxrwx 1 root root 13 Sep 24 2013 /etc/alternatives/php -> /usr/bin/php7.0
$ man php7.0 // Read manual

You could try out the Command-Line (CLI) PHP via:

// Say hello
$ php -r 'echo "Hello, world!\n";'
Hello, world!

// Run phpinfo()
$ php -r 'phpinfo();'
......
The PHP configuration files are "/etc/php/7.0/apache2/php.ini" for the Apache interface; and
"/etc/php/7.0/cli/php.ini" for standalone command-line interface.
Write a PHP script called "test.php" (place under Apache's base at "var/www/html") to
run phpinfo() under Apache, as below.

<?php
phpinfo();
?>

Run the script via http://localhost/test.php. The output shows that the loaded configuration files are
"/etc/php/7.0/apache2/php.ini" and "/etc/php/7.0/apache2/conf.d/*.ini ". The "conf.d"
contains links to "/etc/php/7.0/mods-available".
The Apache loads the PHP module via "/etc/apache2/apache2.conf" ⇒ "/etc/apache2/mods-
enabled/php7.0.conf|php7.0.load" ⇒ "/etc/apache2/mods-
available/php7.0.conf|php7.0.load".
8.6 How to install PhpMyAdmin
"PhpMyAdmin" is a PHP app running under Apache, which provides an GUI for managing MySQL.
Run apt install to install phpmyadmin:
$ sudo apt install phpmyadmin
......
The following NEW packages will be installed:
dbconfig-common dbconfig-mysql javascript-common libjs-jquery
libjs-sphinxdoc libjs-underscore php-gd php-gettext php-mbstring php-pear
php-phpseclib php-tcpdf php-xml php7.0-gd php7.0-mbstring php7.0-xml
phpmyadmin
......
Select 'apache2' in 'Server Selection'
Select 'yes' to use dbconfig.common to setup the database
Choose a password for MySQL user 'phpmyadmin'

$ whereis phpmyadmin
phpmyadmin: /etc/phpmyadmin /usr/share/phpmyadmin
You can access PhpMyAdmin via http://localhost/phpmyadmin .
PHP's configuration file for Apache is "/etc/phpmyadmin/apache.conf", which is included into
Apache's main config file "/etc/apache2/apache2.conf" thru "/etc/apache2/conf-
enabled/phpmyadmin.conf". In the configuration, an alias "/phpmyadmin" is defined which is mapped
to phpMyAdmin's web pages at "/usr/share/phpmyadmin".
NOTE: If you did not select apache2 during the installation, make a symlink
called phpmyadmin.conf in /etc/apache2/conf-available to /etc/phpmyadmin/apache.conf ; and
use a2enconf to enable the configuration.
$ cd /etc/apache2/conf-available
$ sudo ln -s /etc/phpmyadmin/apache.conf phpmyadmin.conf
$ sudo a2enconf phpmyadmin.conf
$ sudo service apache2 restart

8.7 IDE for PHP Program Development


You need an IDE for PHP program development. The popular PHP IDE are:
• Eclipse PDT
• NetBeans

8.8 How to install xDebug PHP Extension


A debugger is critical in program development.
On Eclipse PDT, you can use either xDebug or Zend Debugger. This section describes xDebug
@ http://xdebug.org.

To install and setup xDebug for Eclipse PDT:


1. Install xdebug extension for PHP

2. $ sudo apt install php-xdebug


3. The following NEW packages will be installed:
4. php-xdebug
5. ......
6.
7. $ dpkg --status php-xdebug
8. ......
9. Version: 2.4.0-1
10. ......
11.
12. $ dpkg --listfiles php-xdebug
13. ......
14. /etc/php/7.0/mods-available/xdebug.ini
15. ......
16. /usr/lib/php/20151012/xdebug.so
17. ......
18. /usr/share/doc/php-xdebug/changelog.Debian.gz

/usr/share/doc/php-xdebug/copyright
19. Check the location of "xdebug.so" module, which is kept under
"/usr/lib/php/20151012", where the number depends on the PHP version.
20. The installation creates a configuration file "/etc/php/7.0/mods-
available/xdebug.ini" with the following line (otherwise, create one):

zend_extension=xdebug.so

NOTE: in the previous version, you need to specify the full-path filename, e.g.,
"zend_extension=/usr/lib/php/20151012/xdebug.so ".
Include the following lines into "xdebug.ini" to enable remote debugging from Eclipse
PDT:

xdebug.remote_enable = On
xdebug.remote_port = 9000
xdebug.remote_host = 127.0.0.1

Recall that Apache loads PHP configuration files "/etc/php/7.0/apache2/php.ini " and
"/etc/php/7.0/apache2/conf.d/*.ini". To enable the above xdebug configuration
file, create the following symlink in "/etc/php/7.0/apache2/conf.d " (already created
for the latest version - check first):
$ cd /etc/php/7.0/apache2/conf.d
$ sudo ln -s ../../mods-available/xdebug.ini 20-xdebug.ini
$ ls -l
lrwxrwxrwx 1 root root 31 Sep 11 19:42 20-xdebug.ini -> ../../mods-
available/xdebug.ini
21. Check PHP configuration file "/etc/php/7.0/apache2/php.ini" for the following
settings:
22. ; Turn on the error display for development system,
23. ; but not for production system.
24. display_errors = On
25.
26. ; Format error in HTML

html_errors = On
27. Restart the Apache2:

28. $ sudo service apache2 restart


29. Check the phpinfo() output to verify xdebug has been started. Create a PHP script
called "test.php" with the following lines, and save under the Apache's base directory
"/var/www" (or "/var/www/html"):

30. <?php
31. phpinfo();

?>

Issue http://localhost/test.php , and search for xdebug (as shown below) to confirm

that xdebug is activated.


Now, you can configure Eclipse PDT to work with "xdebug" for remote debugging of PHP programs:
See "Eclipse PDT".
8.9 How to install Zend Debugger for PHP
[TODO] Need to Update

You can use either xdebug or Zend Debugger, but not both?!

NOTE: I have problems setting up Zend Debugger. I suggest you use xDebug (descried in the previous
section).
1. Download the Zend PHP debugger
from http://www.zend.com/en/products/studio/downloads.
2. Extract the tarball.
3. Check your PHP version via "php --version".
4. Copy the "ZendDebugger.so" module from the corresponding PHP version folder
into /usr/lib/php5. At the time of writing, PHP 5.4 is not supported!!!
5. Edit the php configuration file /etc/php5/apache2/php.ini to append the below:
6. ; The section name is optional, but it's always a good idea to add it,
7. ; especially if you are not using a separate file
8. [Zend]
9.
10. ; This directive needs the full path to the Zend Debugger binary
11. zend_extension =/usr/lib/php5/ZendDebugger.so
12.
13. ; This directive allows Zend Debugger to start a debug session with:
14. zend_debugger.allow_hosts=127.0.0.1/32
15.
16. ; This directive allows Zend Debugger to expose itself
17. ; upon request (this is used in some service functionality).
18. ; The possible options are:
19. ; never – do not expose (default)
20. ; always – expose to whoever wants to know
21. ; allowed_hosts – expose only if the request comes from an IP listed above

zend_debugger.expose_remotely=always

22. Restart the Apache2 via

$ sudo service apache2 restart

23. Check the Apache's error log via

24. $ tail /var/log/apache2/error.log


If error "Failed loading /usr/lib/php5/ZendDebugger.so : libssl.so.0.9.8: cannot
open shared object file: No such file or directory" occurs, you need to install libssl.
$ sudo apt search libssl0.9.8
libssl0.9.8 - SSL shared libraries
libssl0.9.8-dbg - Symbol tables for libssl and libcrypto

$ sudo apt install libssl0.9.8


Restart apache2 and check the Apache's error log.
25. Check the phpinfo() output to verify Zend Debugger has been started.
8.10 How to install Firebug plugin for Firefox for debugging
Client-side HTML/CSS/JavaScript
Start Firefox, select menu "Tools" ⇒ Add-ons ⇒ Search for "Firebug" ⇒ Install.

[TODO] Debugging JavaScript

9. How to Install Tomcat 7/8 on Ubuntu


9.1 Install via APT
Search for tomcat packages:

// Search for package containing the term "tomcat"


$ apt-cache search tomcat
// tomcat7 and tomcat6 available

// Show the description of tomcat7


$ apt-cache show tomcat7 | less
// Check the suggest packages

Install tomcat packages:

$ sudo apt install tomcat7

// Optional: Install some suggested packages


$ sudo apt install tomcat7-docs tomcat7-admin tomcat7-examples tomcat7-user
Define environment variable JAVA_HOME (?!)

To start/stop tomcat:

$ sudo service tomcat7 start


$ sudo service tomcat7 stop
$ sudo service tomcat7 restart
You can access tomcat via http://localhost:8080.
9.2 Install Manually
Step 1: Download
Goto http://tomcat.apache.org ⇒ Download ⇒ Tomcat 8.0 ⇒ 8.0.{xx} (where {xx} denotes the
latest release) ⇒ Binary distribution ⇒ Core ⇒ Download the "tar.gz" package (e.g., "apache-tomcat-
8.0.{xx}.tar.gz").
Step 2: Install
Assume that it is to be installed under "/usr/local/tomcat".
$ cd /usr/local/tomcat
$ sudo tar xzvf /PATH/TO/apache-tomcat-8.0.{xx}.tar.gz
// unzip into /usr/local/tomcat/apache-tomcat-8.0.{xx}
For security reasons, you should NOT run tomcat using root user. We shall create a non-login user
called tomcat (in group tomcat) to run the server.
// Create a user called "tomcat" in group "tomcat"
$ sudo useradd -s /sbin/nologin -d /opt/tomcat/temp tomcat
// -s <login-shell>: specify the login shell
// -d <home-dir>

// Change ownership to user "tomcat" and group "tomcat"


$ cd /usr/local/tomcat
$ sudo chown -R tomcat:tomcat apache-tomcat-8.0.{xx}
// -R: recursively for the sub-directories
$ sudo chmod -R 750 apache-tomcat-8.0.{xx}
// -R: recursively for the sub-directories

[TODO] Test the permissions; change to adduser from useradd.


Step 3: Set Environment Variable JAVA_HOME
Check if the environment variable JAVA_HOME, containing the JDK installed directory, has been set. To
verify:
$ echo $JAVA_HOME
[JDK installed directory]
If JAVA_HOME is not set, you can edit "/etc/profile":
$ sudo nano /etc/profile
Include the following line at the end of the file. I shall assume that JDK is installed
in /usr/local/java/jdk1.8.0_{xx}. But you need to verify the location of your JDK installed
directory!!!
export JAVA_HOME=/usr/local/java/jdk1.8.0_{xx}

Rerun the script:

$ source /etc/profile

// To verify:
$ echo $JAVA_HOME
[/usr/local/java/jdk1.8.0_{xx}]

Step 4: Configure Tomcat Server


You can start tomcat using the default configuration files provided. Read "Configure Tomcat Server"
for the configuration options.
Step 4: Start/Stop Tomcat Server Manually
To start the Tomcat server, open a new "Terminal" and issue:

$ cd /usr/local/tomcat/apache-tomcat-8.0.{xx}/bin
// All the following commands can be used to start tomcat
$ ./startup.sh
$ ./catalina.sh run
$ ./catalina.sh start
// use "sudo" if permissions denied
If you will get an error "permission denied" on running the script, you need to set the script to be
executable, via command "chmod uga+x *.sh".

Check for the Tomcat server's TCP port number from the console messages. The default is 8080.
To verify if the Tomcat server is started, start a browser and issue URL http://localhost:8080,
suppose that Tomcat is running on the default TCP port number of 8080.
Also try URL http://localhost:8080/examples which shows the Servlet/JSP examples.

To shutdown the Tomcat server, you can simply press control-c on the tomcat console, or issue
command:

$ cd /usr/local/tomcat/apache-tomcat-8.0.{xx}/bin
// All the following commands can be used to shutdown tomcat
$ ./shutdown.sh
$ ./catalina.sh stop

Step 5: Running Tomcat as a service


Create an initialization script called "tomcat8" under directory "/etc/init.d", with the following
contents. Check your tomcat installed directory in CATALINA_HOME.
$ sudo nano /etc/init.d/tomcat8
#!/bin/bash
export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-8.0.12
PATH=/sbin:/bin:/usr/sbin:/usr/bin
start() {
sh $CATALINA_HOME/bin/startup.sh
}
stop() {
sh $CATALINA_HOME/bin/shutdown.sh
}
case $1 in
start|stop) $1;;
restart) stop; start;;
*) echo "Run as $0 <start|stop|restart>"; exit 1;;
esac

Set the permissions (executable):

$ sudo chmod 755 /etc/init.d/tomcat8

To start/stop the tomcat8 service:

// To start
$ sudo service tomcat8 start
$ sudo /etc/init.d/tomcat8 start // same as above

// To stop
$ sudo service tomcat8 stop
$ sudo /etc/init.d/tomcat8 stop // same as above

To start tomcat8 service automatically after boot:

$ sudo update-rc.d tomcat8 defaults

Step 6: Servlet API


To write Java servlets, you need to COPY the Servlet API JAR file (" servlet-api.jar") from
"~/myProject/tomcat/lib" to the JDK's extension directory at
"/usr/local/java/jdk1.8.0_{xx}/jre/lib/ext ". You may need the superuser right.
[TODO] Does not work on latest JDK/Tomcat. Need to include servlet-api.jar in classpath to
compile.
10. How to Install Postfix as a Send-Only Mail Server
Reference: Postfix @ https://help.ubuntu.com/community/Postfix.

Postfix is an MTA (Mail Transfer Agent), an application used to send and receive email.

To install postfix mail server:

$ sudo apt install postfix


To configure postfix, run:

$ sudo dpkg-reconfigure postfix


Read "postfix" @ https://help.ubuntu.com/community/Postfix for the configuration options.
The utility "sendmail" is installed in /usr/sbin/sendmail.
To send an email:

$ sendmail -v [email protected]
Subject: test
This is a test message
Ctrl-D

The -v option requests for a mail delivery report, which is optional.


You should also install the "mailutils", for the "mail" utility.
$ sudo apt install mailutils
Try sending an email to a user at the localhost, via "sendmail local-username", you can then read
the email by logging-in as the local-username, and run:
$ mail
.......
The postfix configuration is kept in /etc/postfix/main.cf. Run "/etc/init.d/postfix reload" to
reload the configuration.
Disable Incoming Mail
You can use the inet_interfaces directive in /etc/postfix/main.cf to control what address Postfix
listens on for incoming connections. If you set it to the following it will only listen on the loopback
interface, which means that connections can only originate from that machine.

inet_interfaces = loopback-only

11. How to Install SSH Server


SSH (Secure Shell) is the secured version of the legacy telnet, which transmits everything including
password in clear text.
Setting up an SSH Server - OpenSSH
Install openssh-server package. The SSH server daemon is called sshd. The SSH Server runs on TCP
port 22, by default. The configuration file is kept in /etc/ssh/sshd_config.

The OpenSSH package comprises a suite of tools:


1. sshd server,
2. ssh client,
3. sftp (secure ftp), which replaces ftp (file transfer protocol),
4. scp (secure copy), which replaces rcp (remote copy).
The ftp (file transfer protocol), like telnet, is unsecured. sftp puts the ftp over the
secured ssh connection. The legacy rcp (remote copy) was primarily used to copy a single file between
machines. The scp replaces rcp by channeling the data over the
secured ssh connection. sftp operates on many files; while scp works on a single file.
12. C/C++ Programming on Ubuntu
C Programming
Check if GNU C-compiler "gcc" is installed:

$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

If not, install "gcc" via:

$ sudo apt install gcc


Write the following hello-world program and save as "Hello.c" in a directory of your choice:

#include <stdio.h>

int main() {
printf("Hello world from C!\n");
}
$ cd <your-c-directory>
// Compile the program
$ gcc Hello.c
// To run the program
$ ./a.out
Hello, world!

C++ Programming
Check if GNU C++ compiler "g++" is installed:

$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

If not, install "g++" via:

$ sudo apt install g++


Write the following hello-world program and save as "Hello.cpp" in a directory of your choice:

#include <iostream>
using namespace std;

int main() {
cout << "Hello world from C++!" << endl;
}
$ cd your-directory
// Compile the program
$ g++ Hello.cpp
// To run the program
$ ./a.out
Hello, world!

C/C++ IDE
You could use Eclipse or NetBeans as C/C++ IDE. Read the "Eclipse How-To" or "NetBean How-To".

13. Ubuntu's Tips and Tweaks


13.1 Terminal
1. Copy/Paste Shortcut Keys :
The default shortcut keys for copy/paste in Terminal are Shift-Ctrl-C and Shift-Ctrl-V.
You can also use the mouse pointer to select texts, and click the "middle" mouse button
(if you have one) to paste the highlighted texts. Ctrl-C, by default, is configured
for interrupt signal (or break).
To use Ctrl-C/Ctrl-V as copy/paste, I reconfigure Ctrl-J (or Ctrl-Shift-C) as the interrupt
signal by placing this line in the "~/.profile":

stty intr ^J

Then, we can configure Ctrl-C/Ctrl-V as copy/paste via Terminal's menu "Edit" ⇒


Keyboard Shortcuts.
2. Shortcut to launch Terminal : To configure a shortcut key to launch a Terminal,
goto System ⇒ Preferences ⇒ Keyboard Shortcuts ⇒ Under Desktop category, choose
"Run a Terminal" ⇒ Press the key you want to set as shortcut (e.g., ctrl-t).
3. Command-line Interface (CLI) Consoles : You can press Ctrl-Alt-F1 to Ctrl-
Alt-F6 to activate one of the 6 virtual command-line consoles (provided by getty/agetty
programs). Press Ctrl-Alt-F7 to return to the GUI console. These command-line console
is handy if your GUI console is having problem.
13.2 User Administration
1. How to hide an user from the login Screen : One way is to set the UID to a
number less than 1000 (UID less than 1000 are system users; 1000 and above for regular
users).
$ sudo usermod -u <uid> <username>

2. How to Change the Display Name : The display name is kept in /etc/passwd.
You can avoid editing /etc/passwd directly by using utility chfn:
3. $ less /etc/passwd
4. ......
5. // Change user information
6. $ sudo chfn <username>
7. $ less /etc/passwd
......
Note: You can check the integrity of /etc/passwd via utility pwck.
8. How to change a username :
$ sudo usermod -l <new-username> <old-username>
This does not affect the file ownerships, as they are based on UID instead of username.
You also need to move the home folder as follows:
$ sudo usermod -d /home/<new-user-dir> -m <new-username>

9. Show the user login history:

10. $ last
11. // from /var/log/wtmp
12. $ last -f /var/log/wtmp.1
13. // from older file
14. $ last -num

// number of lines
Or, via Webmin ⇒ Users and Groups ⇒ Button "Display Logins by".
13.3 System Administration
1. How to change the hostname : Your hostname is defined in two
files: /etc/hostname and /etc/hosts.
2. $ sudo gedit /etc/hostname

$ sudo gedit /etc/hosts

3. How to choose hostnames : Either functional names (which represents, in some


encoded form, the purpose of the machine) or mnemonic names (which are drawn from
some pre-existing human naming scheme and contained no implicit meaning about the
machine's purpose, e.g., fruits, flowers, rivers, elements, stars, drinks, etc.). Human users
seem to prefer mnemonic names over functional names.
4. How to mount a drive automatically at startup : Instead of manually
editing /etc/fstab, Dash "Disks" ⇒ Select the drive or partition ⇒ click icon "More
Actions" ⇒ Edit Mount Options ⇒ set "Automatic Mount Options" to off ⇒ Set "Mount
Options" to "Mount at startup" ⇒ set the "mount point" (e.g., /mnt/<drive-name>).
Check /etc/fstab for the modifications.
5. Show Disk Usage :
o df (Disk File system) command: report file system and disk space usage. Try
"df" and "df -h"
o du (Disk Usage for EACH file) command: estimate file space usage.
6. How to read Ubuntu files from Windows : Ubuntu uses Ext2 (or Ext3/Ext4)
file system. To read Ubuntu files from Windows, install software such as "Paragon ExtFS
for Windows" (Free for personal use) or "Ext2Read".
7. sudo cd?? : "sudo cd dirname" does not work, because cd is a shell built-in, not a
binary. You could issue "sudo su" to switch to root, followed by "cd dirname".
8. Shutdown from command-line : You can shutdown the machine from Terminal,
or one of the 6 command-line console (activated via Ctrl-Alt-F1 to Ctrl-Alt-F6) using:
9. // Shutdown
10. $ sudo shutdown now
11.
12. // Restart
13. $ sudo shutdown -r now
14. // -r to restart

$ sudo reboot
Or, via Webmin ⇒ System ⇒ Bootup and Shutdown ⇒ Button "Reboot System", or
"Shutdown System".
15. How to set the Grub dual-boot to wait for enter key

16. $ sudo nano /etc/default/grub


17. # Set to -1 to wait for enter key

GRUB_TIMEOUT=-1
18. Multiple Display: The display configurations are saved in ~/.config/monitor.xml. You
can remove it to re-configure.
19. Show date/time: via command "date".
20. Ubuntu Software Updater vs apt: [TODO]
13.4 "Nautilus" File Manager
1. Show directory path in File Manager : Press Ctrl-l to show path, ESC to show
icons.
2. How to show files in list view instead of icon view : Edit ⇒ Preference ⇒
choose "Views" tab ⇒ Default View ⇒ View new folders using ⇒ choose "List view". You
can also choose the columns to be displayed under "List Columns" tab.
3. View dot (hidden) files : Select "File" menu ⇒ Preferences ⇒ View ⇒ Show hidden
files.
4. Bookmark Folders (in the sidebar) : Select the desired folder, click the
"options" icon ⇒ Bookmark this location. The bookmarked folder will be shown in the
sidebar.
5. How to remove pre-set bookmarks from the sidebar such as
Videos : Edit ~/.config/user-dirs.dirs, and comment out the unwanted ones.
Create a file ~/.config/user-dirs.conf with a line enabled=false. Logout and sign-
in again.
13.5 gedit
1. Enable spell check : under "tool" menu ⇒ edit ⇒ preferences.
13.6 Accessing Remote Server
You can login to a remote server via command-line SSH, and transfer files via SCP. You can also use
GUI client such as FileZilla.
SSH (Secured Shell)
A terminal-based command-line client for logging in to the remote server.

$ ssh <username>@<server-name>
// OR
$ ssh <server-name> -l <username>

SCP (Secure Copy)


A terminal-based command-line client for copying files between local machine and remote server.

$ scp <source> <dest>


// <source>/<dest> format: <username>@<server-name>:<path-name>

Mount Folders of Remote Server on Nautilus File Manager


Select "Files" menu ⇒ Connect to Server ⇒ enter "sftp://server-name/path".
FileZilla FTP/SFTP GUI Client
To install:

$ sudo apt install filezilla


$ which filezilla
/usr/bin/filezilla
To launch FileZilla, type FileZilla from Dash. In host, use sftp://server-name; in port, use 22 for
SSH.
(For Windows) WinSCP and Putty
WinSCP is a GUI SCP for Windows. Putty is a GUI SSH client.

13.7 Ubuntu Applications


Epub Reader - Calibre
To install:

$ sudo apt install calibre

You can launch Calibre from the dash.


VLC Media Player :
GIMP Image Editor : an image editing software like Photoshop. Can be installed from the Ubuntu
Software.
BleachBit : For cleaning up the Ubuntu system.
Google Chrome :
Terminator : A multiple terminal consoles (to replace the terminal). Can be installed from the
Ubuntu Software.
13.8 Miscellaneous
How to create desktop icons : Goto /usr/share/applications. Ctrl-C to copy an app and
Ctrl-V to paste a shortcut on desktop.
REFERENCES & RESOURCES
1. Ubuntu Mother site @ http://www.ubuntu.com.
2. Matthew Helmke, "Ubuntu Unleashed 2012 edition", 2012, Sams.
3. Matthew Helmke & Amber Graner, "The official Ubuntu book", 7th ed, 2012, Canonical
Inc. (For beginners.)
Latest version tested: Ubuntu 18.04 LTS
Last modified: January, 2020
Feedback, comments, corrections, and errata can be sent to Chua Hock-Chuan
([email protected]) | HOME

You might also like