Lubuntu 16 desktop


There is no big difference against setup between Lubuntu and Ubuntu. I just want to keep a latest version of setup for myself as reference


  • You have Lubuntu 16 in place
  • Internet is available

UFW setup

sudo ufw enable
sudo ufw allow 80/tcp
sudo ufw allow ssh
sudo ufw allow 443/tcp
sudo ufw allow 8000/tcp

SSH server setup

!!! For production environment, SSH should be secured by the CA

sudo apt-get install openssh-server

## backup default config
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults

## use any editor to update sshd_config
sudo nano /etc/ssh/sshd_config

## uncomment  PasswordAuthentication yes to allow remote password login
## Password authentication is only for test environment

## setup ssh auto-start onboot
sudo update-rc.d ssh defaults

!!! Install the software-properties-common Package

sudo apt-get install software-properties-common python-software-properties

Time Zone setup

sudo dpkg-reconfigure tzdata

Install tmux

sudo apt-get install tmux
  • Most useful tmux commands

Ctrl+b “ — split pane horizontally.

Ctrl+b % — split pane vertically.

Ctrl+b arrow key — switch pane.

Hold Ctrl+b, don’t release it and hold one of the arrow keys — resize pane.

Ctrl+b c — ©reate a new window.

Ctrl+b , — rename reate a new window.

Ctrl+b n — move to the (n)ext window.

Ctrl+b p — move to the (p)revious window.

Install git

sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git

install docker CE (Ubuntu 16 LTS)

## Update the apt package index
sudo apt-get update

## Install packages to allow apt to use a repository over HTTPS
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \

## Add Docker’s official GPG key
curl -fsSL | sudo apt-key add -

## Verify the last 8 characters of the fingerprint.
sudo apt-key fingerprint xxxxxxxx

##   set up the stable repository
sudo add-apt-repository \
   "deb [arch=amd64] \
   $(lsb_release -cs) \

## apt update
sudo apt-get update

## install docker CE
sudo apt-get install docker-ce

Install JDK 9

  • Downlaod the JDK from Oracle website.

    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo apt-get install oracle-java9-installer
    java -version
  • Setup environment

    sudo apt-get install oracle-java9-set-default
    sudo apt autoremove
    ## Following setup is no longer required
    ## sudo su
    ## cat >> /etc/environment <<EOL
    ## JAVA_HOME=/usr/lib/jvm/java-9-oracle
    ## JRE_HOME=/usr/lib/jvm/java-9-oracle/jre
    ## EOL
  • Test JDK with a simple HelloWorld program

    import java.util.Calendar;
    class HelloWorld {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH) + 1;
        int day = cal.get(Calendar.DATE);
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        int minute = cal.get(Calendar.MINUTE);
        String username = System.getProperty("");
        System.out.println(username+ ": Hello World! ");
        System.out.println(year + "/" + month + "/" + day + " " + hour + ":" + minute);
  • Compile and run the program


Install nodejs

  • Install Nodejs 8.x

    curl -sL | sudo -E bash -
    sudo apt-get install -y nodejs
  • Install latest npm, yarn and ts

    sudo npm install -g npm
    sudo npm install -g typescript
    sudo mpm install -g yarn

Install PHP

  • Add new repo

    sudo apt-get install -y python-software-properties
    sudo add-apt-repository -y ppa:ondrej/php
    sudo apt-get update -y
    apt-cache pkgnames | grep php7.2
  • Option 1: Install LAMP stack

    sudo apt-get install -y apache2
    sudo apt-get install -y php7.2 libapache2-mod-php7.2 \
    php7.2-cli php7.2-common php7.2-mbstring php7.2-gd \
    php7.2-intl php7.2-xml php7.2-mysql php7.1-mcrypt php7.2-zip
  • Option 2: Install LEMP stack

    sudo apt-get install -y nginx
    sudo apt-get install -y php7.2 php7.2-fpm php7.2-cli \
    php7.2-common php7.2-mbstring php7.2-gd php7.2-intl \
    php7.2-xml php7.2-mysql php7.1-mcrypt php7.2-zip
  • Disable Apache and Nginx if you install both

    sudo systemctl disable apache2.service
    sudo systemctl disable nginx.service

Install Python2, Python3

  • Ubuntu has python2 installed by default

    sudo apt-get python-pip
    sudo apt-get install python3-pip
    sudo apt-get install python3-dev python-dev
    ## Install virtualenv
    sudo pip install virtualenv
    sudo pip3 install virtualenv
  • Install new python 3.6

    sudo add-apt-repository ppa:deadsnakes/ppa
    sudo apt-get update
    sudo apt-get install python3.6

Install Go

  • Install Go

    ## check hash
    shasum -a 256 go*linux-amd64.tar.gz
    ## install tar ball
    sudo tar -xvzf go*linux-amd64.tar.gz
    sudo mv go /usr/local

    export GOROOT="/usr/local/go"
    export GOPATH="$HOME/ws/go"
    export PATH="$GOROOT/bin:$GOPATH/bin:$PATH"
  • Create a simple hello.go file to test

touch ~/ws/go/src/hello/hello.go

package main

import (

func main(){
    user, err := user.Current()
    if err != nil {
    fmt.Printf(user.Name + " said : Hello World! \n" )
  • Run the program

    go run $GOPATH/src/hello/hello.go
    go install hello
  • Install hugo

    # use apt
    sudo apt install hugo
    # use snap
    sudo snap install hugo

Install clang & cmake

sudo apt-get install clang
sudo apt-get install cmake

Install Rust

$ curl -f -L -O
$ sh

Install vim 8

  • Add ppa repo

    sudo add-apt-repository ppa:jonathonf/vim
    sudo apt update
    sudo apt install vim
  • Install awesome vimrc

    git clone --depth=1 ~/.vim_runtime
    sh ~/.vim_runtime/

Install MySql

  • Install mysql

    sudo dpkg -i mysql-apt-config_0.8.9-1_all.deb
    sudo apt-get install mysql-server
    systemctl status mysql
    mysqladmin -u root -p version
    mysql -u root -p mysql
  • create a sample table products

    CREATE TABLE products (
    title VARCHAR(255),
    price DECIMAL(10, 2)  NOT NULL,
    created_at datetime,
    deleted_at datetime,
    tags VARCHAR(255)
    ,PRIMARY KEY (id)
    load data local infile '/home/<your_name>/db/products.csv' into table products \
    fields terminated by ',' enclosed by '"' lines terminated by '\n' \
    (id, title, price, created_at, deleted_at, tags);

Install PostgresQL

  • psql is case sensitive

    echo 'deb xenial-pgdg main' \
    >> /etc/apt/sources.list.d/pgdg.list
    wget --quiet -O - | \
    sudo apt-key add -
    sudo apt-get update
    sudo apt-get install postgresql-10
    sudo su - postgres
    psql -U postgres
    ## Create a dump databbase
    curl -L -O
    createdb pgguide
    pg_restore --no-owner --dbname pgguide example.dump
    psql --dbname pgguide
    ## Rename database -- use double quote 
    ALTER database "pgguide" rename to "sample"
  • export the database to sql file

    sudo su postgres
    pg_dump sample >> sample.sql
  • export table to csv file

    COPY products to '/home/<your_name>/db/products.csv' delimiter ',' csv; 
  • export data to json file

    select json_agg(t) from \
    (select * from products) t \t on \pset format unaligned \g products.json

Install mongodb

sudo apt-key adv --keyserver hkp:// \ 
    --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
echo "deb [ arch=amd64,arm64 ] \
  xenial/mongodb-org/3.6 multiverse" \
  | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

sudo apt-get update
sudo apt-get install -y mongodb-org

sudo service mongod start
sudo service mongod stop
sudo service mongod status

  • Create a database sample and insert one record into document products

    use sample
    id: 1,
    title: "Dictionary", 
    price: 9.99, 
    created_at: "2011-01-02 07:00:00+11", 
    tags: "{Book}"
  • Import json into database

    mongoimport --db sample --collection products --drop \
    --jsonArray --file ~/db/products.json