diff --git a/.gitignore b/.gitignore
index a02d875..ee70e67 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,10 +11,8 @@
 
 # Misc
 .DS_Store
-mininet
-mn_wifi
-ndn-src
-openflow
+dl
+*.apconf
 
 # Vagrant
 .vagrant
diff --git a/README.md b/README.md
index 5a1d007..02ba988 100644
--- a/README.md
+++ b/README.md
@@ -27,6 +27,6 @@
 Please refer to http://minindn.memphis.edu/ or [docs/index.rst](docs/index.rst) for installation, usage, and other documentation.
 The documentation can be built using:
 
-    ./install.sh -d
+    ./docs/build.sh
 
 and is available under `docs/_build/html`.
diff --git a/docs/build.sh b/docs/build.sh
new file mode 100755
index 0000000..1b1594a
--- /dev/null
+++ b/docs/build.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+# -*- Mode:bash; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+#
+# Copyright (C) 2015-2021, The University of Memphis,
+#                          Arizona Board of Regents,
+#                          Regents of the University of California.
+#
+# This file is part of Mini-NDN.
+# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
+#
+# Mini-NDN is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Mini-NDN is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Mini-NDN, e.g., in COPYING.md file.
+# If not, see <http://www.gnu.org/licenses/>.
+
+set -eo pipefail
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+PIP='python3 -m pip'
+
+for PIPPKG in sphinx sphinx_rtd_theme; do
+  if ! $PIP show $PIPPKG >/dev/null; then
+    sudo $PIP install $PIPPKG
+  fi
+done
+
+make clean html
diff --git a/docs/install.rst b/docs/install.rst
index 9073622..40da6b3 100644
--- a/docs/install.rst
+++ b/docs/install.rst
@@ -4,11 +4,13 @@
 Prerequisites
 -------------
 
-For this guide, you will need a laptop/desktop with a recent version of
-a Linux distro that is supported by Mininet. For this guide, the *Ubuntu 18.04 LTS* release was used.
-Some tweaks maybe required to Mini-NDN's install.sh file for other distros.
-Note that you'll need administrative privileges in order to download and install
-extra packages and also to execute **Mini-NDN**.
+Mini-NDN is tested on the following Linux distributions:
+
+- Ubuntu 20.04 (recommended)
+- Debian 11 (WiFi scenario does not work)
+- Fedora 33 (WiFi scenario does not work)
+
+You must have sudo privileges to install and run Mini-NDN.
 
 Using Vagrantfile
 -----------------
@@ -21,66 +23,56 @@
 Using install.sh
 ----------------
 
-Mini-NDN depends on Mininet and NDN software to be installed in the system.
-If you have all the dependencies (see sections below) **installed in the system** simply
-clone this repository and run:
+Mini-NDN has the following dependencies:
+
+- `NDN Forwarding Daemon (NFD) <https://named-data.net/doc/NFD/>`_
+- `Named Data Link State Routing (NLSR) <https://named-data.net/doc/NLSR/>`_
+- `NDN Essential Tools (ndn-tools) <https://github.com/named-data/ndn-tools>`_
+- `NDN Traffic Generator <https://github.com/named-data/ndn-traffic-generator>`_
+- `infoedit <https://github.com/NDN-Routing/infoedit>`_
+- `Mininet <http://mininet.org/>`_
+- `Mininet-WiFi <https://mininet-wifi.github.io/>`_ (optional)
+
+To install Mini-NDN and its dependencies, clone this repository and run:
 
 ::
 
-    ./install.sh -i
+    ./install.sh
 
-The ``-i`` option uses ``setup.py develop`` to point the system install
-to the current directory. So any changes made to the cloned ``mini-ndn``
-folder will be used without having to install it again to the system.
-If you do not need to modify the core of Mini-NDN, then setup.py install (or pip install .)
-can be used directly. See :doc:`experiment <experiment>` for more information on running.
+The script accepts various command line flags.
+Some notable flags are:
 
-If you don't have the dependencies, the following command will
-install them from source along with Mini-NDN. The dependencies include
-Mininet, NDN core (ndn-cxx, NFD, Chronosync, PSync, NLSR), Infoedit,
-and NDN Common Client Libraries (CCL). If you do not wish to install
-the master versions of the NDN core or want to switch to specific versions,
-you can edit the install.sh with release tags/specific versions.
+- ``-y`` skips interactive confirmation before installation.
+- ``--ppa`` prefers installing NDN software from `named-data PPA <https://launchpad.net/~named-data/+archive/ubuntu/ppa>`_.
+  This shortens installation time by downloading binary packages, but is only available on Ubuntu.
+- ``--source`` prefers installing NDN software from source code.
+- ``--dummy-keychain`` patches ndn-cxx to use an in-memory dummy KeyChain, which reduces CPU overhead
+  and allows you to scale up Mini-NDN experiments. Large Mini-NDN experiments would run significantly
+  faster after applying this patch. However, your experiments cannot use any NDN security related
+  features (signatures, verifier, access control, etc).
+- ``--no-wifi`` skips Mininet-WiFi dependency.
+  Currently Mininet-WiFi only works on Ubuntu, so that you must specify this option when installing on other distros.
 
-.. _scaling-note:
-.. important::
-    If you wish to scale Mini-NDN experiments and do not have use for security extensions
-    in your emulations, you should apply the ndn-cxx patch given in the ``patches`` folder
-    using ``./install.sh -p`` before running the following commands. The ndn-cxx patch is
-    taken from ndnSIM which provides an in-memory dummy KeyChain to reduce CPU computations.
-    After these patches are applied sleep time after NFD, nfdc, NLSR, etc. is not required
-    making the startup **MUCH** faster and scaling of Mini-NDN **MUCH** better.
+You can see all command line flags by running:
 
 ::
 
-    ./install.sh -a
+    ./install.sh -h
 
-This pulls the NDN software from Github to ``ndn-src`` folder under the project.
+The script uses ``setup.py develop`` to point the system install of Python packages to the codebase
+directory. Therefore, you can modify ``mininet``, ``mininet-wifi``, and ``mini-ndn``, and the
+changes will be reflected immediately.
 
-.. note::
-    If any changes are made to ``ndn-src`` folder, please don't forgot to re-install
-    the sources to the system.
-
-To install without CCL, use:
-
-::
-
-    ./install.sh -mni
-
-To install in "quiet" mode (without user interaction), use:
-
-::
-    ./install.sh -qa
-
-.. note::
-    The order of the flag -q is important to ensure that the environment is ready for
-    a quiet install.
-
-See ``install.sh -h`` for detailed options.
+If NDN software is installed from source code (not PPA), the code is downloaded to ``dl`` directory
+under your ``mini-ndn`` clone. If you modify the source code, you need to manually recompile and
+reinstall the software (``./waf && sudo ./waf install``).
 
 Installing Dependencies
 -----------------------
 
+This section outlines how to install dependnecies manually.
+If you used ``install.sh``, you do not need to perform these steps.
+
 Mininet
 _______
 
diff --git a/install.sh b/install.sh
index e2d9343..1f795de 100755
--- a/install.sh
+++ b/install.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # -*- Mode:bash; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2015-2020, The University of Memphis,
+# Copyright (C) 2015-2021, The University of Memphis,
 #                          Arizona Board of Regents,
 #                          Regents of the University of California.
 #
@@ -21,393 +21,166 @@
 # You should have received a copy of the GNU General Public License
 # along with Mini-NDN, e.g., in COPYING.md file.
 # If not, see <http://www.gnu.org/licenses/>.
-#
-# This file incorporates work covered by the following copyright and
-# permission notice:
-#
-#   Mininet 2.3.0d1 License
-#
-#   Copyright (c) 2013-2016 Open Networking Laboratory
-#   Copyright (c) 2009-2012 Bob Lantz and The Board of Trustees of
-#   The Leland Stanford Junior University
-#
-#   Original authors: Bob Lantz and Brandon Heller
-#
-#   We are making Mininet available for public use and benefit with the
-#   expectation that others will use, modify and enhance the Software and
-#   contribute those enhancements back to the community. However, since we
-#   would like to make the Software available for broadest use, with as few
-#   restrictions as possible permission is hereby granted, free of charge, to
-#   any person obtaining a copy of this Software to deal in the Software
-#   under the copyrights without restriction, including without limitation
-#   the rights to use, copy, modify, merge, publish, distribute, sublicense,
-#   and/or sell copies of the Software, and to permit persons to whom the
-#   Software is furnished to do so, subject to the following conditions:
-#
-#   The above copyright notice and this permission notice shall be included
-#   in all copies or substantial portions of the Software.
-#
-#   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-#   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-#   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-#   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-#   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-#   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-#   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-#   The name and trademarks of copyright holder(s) may NOT be used in
-#   advertising or publicity pertaining to the Software or any derivatives
-#   without specific, written prior permission.
 
-test -e /etc/debian_version && DIST="Debian"
-grep Ubuntu /etc/lsb-release &> /dev/null && DIST="Ubuntu"
+set -eo pipefail
+cd "$(dirname "${BASH_SOURCE[0]}")"
 
-if [[ $DIST == Ubuntu || $DIST == Debian ]]; then
-    update='sudo apt-get update'
-    install='sudo apt-get -y install'
-    remove='sudo apt-get -y remove'
-    pkginst='sudo dpkg -i'
-    # Prereqs for this script
-    if ! which lsb_release &> /dev/null; then
-        $install lsb-release
-    fi
-fi
+# These commands are generally installed on most systems. If not, user must install manually.
+# 'sudo' is not directly used by this script, but Mininet install.sh uses it, so we check that also.
+NEEDED_BINARIES=(
+  awk
+  git
+  sudo
+)
+MISSING_BINARIES=()
 
-test -e /etc/fedora-release && DIST="Fedora"
-if [[ $DIST == Fedora ]]; then
-    update='sudo yum update'
-    install='sudo yum -y install'
-    remove='sudo yum -y erase'
-    pkginst='sudo rpm -ivh'
-    # Prereqs for this script
-    if ! which lsb_release &> /dev/null; then
-        $install redhat-lsb-core
-    fi
-fi
-
-NDN_SRC="ndn-src"
-
-NDN_GITHUB="https://github.com/named-data"
-
-NDN_CXX_VERSION="master"
-NFD_VERSION="master"
-PSYNC_VERSION="master"
-CHRONOSYNC_VERSION="master"
-NLSR_VERSION="master"
-NDN_TOOLS_VERSION="master"
-
-if [ $SUDO_USER ]; then
-    REAL_USER=$SUDO_USER
+SUDO=
+if [[ $(id -u) -eq 0 ]]; then
+  if [[ -n $SUDO_USER ]] && [[ -z $SKIPSUDOCHECK ]]; then
+    cat <<EOT
+Do not run this script through sudo
+Instead, run this script as a regular user; the script will call sudo when needed
+To bypass this check, set the environment variable SKIPSUDOCHECK=1
+EOT
+    exit 1
+  fi
 else
-    REAL_USER=$(whoami)
+  SUDO=sudo
 fi
 
-function patchDummy {
-    git -C $NDN_SRC/ndn-cxx apply $(pwd)/util/patches/ndn-cxx-dummy-keychain-from-ndnsim.patch
-    if [[ "$?" -ne 0 ]]; then
-        echo "Patch might already be applied"
-    fi
-}
-
-function quiet_install {
-    if [[ $DIST == Ubuntu || $DIST == Debian ]]; then
-        update='sudo DEBIAN_FRONTEND=noninteractive apt-get update'
-        install='sudo DEBIAN_FRONTEND=noninteractive apt-get -y install'
-        remove='sudo DEBIAN_FRONTEND=noninteractive apt-get -y remove'
-
-        echo "wireshark-common wireshark-common/install-setuid boolean false" | sudo debconf-set-selections
-    fi
-}
-
-function ndn_install {
-    mkdir -p $NDN_SRC
-    name=$1
-    version=$2
-    wafOptions=$3
-
-    if [[ $version == "master" ]]; then
-        if [[ -d "$NDN_SRC/$name" ]]; then
-            pushd $NDN_SRC/$name
-            git checkout master
-        else
-            git clone --depth 1 $NDN_GITHUB/$name $NDN_SRC/$name
-            pushd $NDN_SRC/$name
-        fi
-    else
-        if [[ -d $NDN_SRC/$name ]]; then
-            pushd $NDN_SRC/$name
-            if [[ $(git rev-parse --is-shallow-repository) == "true" ]]; then
-                git fetch --unshallow
-                git fetch --all
-            fi
-        else
-            git clone $NDN_GITHUB/$name $NDN_SRC/$name
-            pushd $NDN_SRC/$name
-        fi
-        git checkout $version -b version-$version || git checkout version-$version
-    fi
-
-    # User must use the same python version as root to use ./waf outside of this script
-    sudo -E -u $REAL_USER ./waf configure $wafOptions
-    sudo -E -u $REAL_USER ./waf && sudo ./waf install && sudo ldconfig
-    popd
-}
-
-function ndn {
-    if [[ updated != true ]]; then
-        $update
-        updated="true"
-    fi
-
-    if [[ $DIST == Ubuntu || $DIST == Debian ]]; then
-        $install git libsqlite3-dev libboost-all-dev make g++ libssl-dev libpcap-dev pkg-config python-pip
-    fi
-
-    if [[ $DIST == Fedora ]]; then
-        $install gcc-c++ sqlite-devel boost-devel openssl-devel libpcap-devel python-pip
-    fi
-
-    ndn_install ndn-cxx $NDN_CXX_VERSION
-    ndn_install NFD $NFD_VERSION --without-websocket
-    ndn_install PSync $PSYNC_VERSION --with-examples
-    ndn_install ChronoSync $CHRONOSYNC_VERSION
-    ndn_install NLSR $NLSR_VERSION
-    ndn_install ndn-tools $NDN_TOOLS_VERSION
-    infoedit
-}
-
-function mininet {
-    if [[ updated != true ]]; then
-        $update
-        updated="true"
-    fi
-
-    if [[ $pysetup != true ]]; then
-        pysetup="true"
-    fi
-
-    git clone --depth 1 https://github.com/mininet/mininet
-    pushd mininet
-    sudo ./util/install.sh -nv
-    popd
-}
-
-function wifi {
-    if [[ updated != true ]]; then
-        $update
-        updated="true"
-    fi
-
-    if [[ $pysetup != true ]]; then
-        pysetup="true"
-    fi
-
-    git clone --depth 1 https://github.com/intrig-unicamp/mininet-wifi.git
-    pushd mininet-wifi
-    sudo ./util/install.sh -Wlfnv
-    popd
-}
-
-function infoedit {
-    git clone --depth 1 https://github.com/NDN-Routing/infoedit.git $NDN_SRC/infoedit
-    pushd $NDN_SRC/infoedit
-    rm infoedit
-    sudo make install
-    popd
-}
-
-function minindn {
-    $install libigraph0-dev tshark
-    sudo pip install -r requirements.txt
-
-    if [[ updated != true ]]; then
-        if [ ! -d "build" ]; then
-            $update
-            updated="true"
-        fi
-    fi
-
-    if [[ $pysetup != true ]]; then
-        $install python-setuptools
-        pysetup="true"
-    fi
-    install_dir="/usr/local/etc/mini-ndn/"
-
-    sudo mkdir -p "$install_dir"
-    sudo cp topologies/default-topology.conf "$install_dir"
-    sudo cp topologies/minindn.caida.conf "$install_dir"
-    sudo cp topologies/minindn.ucla.conf "$install_dir"
-    sudo cp topologies/minindn.testbed.conf "$install_dir"
-    sudo cp topologies/current-testbed.conf "$install_dir"
-    sudo cp topologies/geo_hyperbolic_test.conf "$install_dir"
-    sudo cp topologies/geant.conf "$install_dir"
-    sudo cp topologies/wifi/singleap-topology.conf "$install_dir"
-    sudo python setup.py develop
-}
-
-function ndn_cpp {
-    if [[ updated != true ]]; then
-        $update
-        updated="true"
-    fi
-
-    if [[ $DIST == Ubuntu || $DIST == Debian ]]; then
-        $install git build-essential libssl-dev libsqlite3-dev libboost-all-dev libprotobuf-dev protobuf-compiler
-    fi
-
-    if [[ $DIST == Fedora ]]; then
-        printf '\nNDN-CPP does not support Fedora yet.\n'
-        return
-    fi
-
-    git clone --depth 1 $NDN_GITHUB/ndn-cpp $NDN_SRC/ndn-cpp
-    pushd $NDN_SRC/ndn-cpp
-    ./configure
-    proc=$(nproc)
-    make -j$proc
-    sudo make install
-    sudo ldconfig
-    popd
-}
-
-function pyNDN {
-    if [[ updated != true ]]; then
-        $update
-        updated="true"
-    fi
-
-    if [[ $DIST == Ubuntu || $DIST == Debian ]]; then
-        $install git build-essential libssl-dev libffi-dev python-dev python-pip
-    fi
-
-    if [[ $DIST == Fedora ]]; then
-        printf '\nPyNDN does not support Fedora yet.\n'
-        return
-    fi
-
-    sudo pip install cryptography trollius protobuf pytest mock
-    git clone --depth 1 $NDN_GITHUB/PyNDN2 $NDN_SRC/PyNDN2
-    pushd $NDN_SRC/PyNDN2
-    # Update the user's PYTHONPATH.
-    echo "export PYTHONPATH=\$PYTHONPATH:`pwd`/python" >> ~/.bashrc
-    # Also update root's PYTHONPATH in case of running under sudo.
-    echo "export PYTHONPATH=\$PYTHONPATH:`pwd`/python" | sudo tee -a /root/.bashrc > /dev/null
-    popd
-}
-
-function ndn_js {
-    if [[ updated != true ]]; then
-        $update
-        updated="true"
-    fi
-
-    if [[ $DIST == Ubuntu || $DIST == Debian ]]; then
-        $install git nodejs npm
-    fi
-
-    if [[ $DIST == Fedora ]]; then
-        printf '\nNDN-JS does not support Fedora yet.\n'
-        return
-    fi
-
-    sudo ln -fs /usr/bin/nodejs /usr/bin/node
-    sudo npm install -g mocha
-    sudo npm install rsa-keygen sqlite3
-    git clone --depth 1 $NDN_GITHUB/ndn-js $NDN_SRC/ndn-js
-}
-
-function jNDN {
-    if [[ updated != true ]]; then
-        $update
-        updated="true"
-    fi
-
-    if [[ $DIST == Ubuntu || $DIST == Debian ]]; then
-        $install git openjdk-8-jdk maven
-    fi
-
-    if [[ $DIST == Fedora ]]; then
-        printf '\nNDN-JS does not support Fedora yet.\n'
-        return
-    fi
-
-    git clone --depth 1 $NDN_GITHUB/jndn $NDN_SRC/jndn
-    pushd $NDN_SRC/jndn
-    mvn install
-    popd
-}
-
-function commonClientLibraries {
-    ndn_cpp
-    pyNDN
-    ndn_js
-    jNDN
-}
-
-function buildDocumentation {
-    sphinxInstalled=$(pip show sphinx | wc -l)
-    sphinxRtdInstalled=$(pip show sphinx_rtd_theme | wc -l)
-    if [[ $sphinxInstalled -eq "0" ]]; then
-        pip install sphinx
-    fi
-
-    if [[ $sphinxRtdInstalled -eq "0" ]]; then
-        pip install sphinx_rtd_theme
-    fi
-    cd docs
-    make clean
-    make html
-}
-
-function usage {
-    printf '\nUsage: %s [-a]\n\n' $(basename $0) >&2
-
-    printf 'options:\n' >&2
-    printf -- ' -a: install all the required dependencies\n' >&2
-    printf -- ' -A: install all the required dependencies (wired only)\n' >&2
-    printf -- ' -c: install Common Client Libraries\n' >&2
-    printf -- ' -d: build documentation\n' >&2
-    printf -- ' -h: print this (H)elp message\n' >&2
-    printf -- ' -i: install mini-ndn\n' >&2
-    printf -- ' -m: install mininet and dependencies (for wired-only installation)\n' >&2
-    printf -- ' -n: install NDN dependencies of mini-ndn including infoedit\n' >&2
-    printf -- ' -p: patch ndn-cxx with dummy key chain\n' >&2
-    printf -- ' -q: quiet install (must be specified first)\n' >&2
-    printf -- ' -w: install mininet-wifi and dependencies\n' >&2
-    exit 2
-}
-
-if [[ $# -eq 0 ]]; then
-    usage
-else
-    while getopts 'aAcdhimnpqw' OPTION
-    do
-        case $OPTION in
-        a)
-        ndn
-        wifi
-        minindn
-        commonClientLibraries
-        break
-        ;;
-        A)
-        ndn
-        mininet
-        minindn
-        commonClientLibraries
-        break
-        ;;
-        c)    commonClientLibraries;;
-        d)    buildDocumentation;;
-        h)    usage;;
-        i)    minindn;;
-        m)    mininet;;
-        n)    ndn;;
-        p)    patchDummy;;
-        q)    quiet_install;;
-        w)    wifi ;;
-        ?)    usage;;
-        esac
-    done
-    shift $(($OPTIND - 1))
+for B in "${NEEDED_BINARIES[@]}"; do
+  if ! command -v "$B" >/dev/null; then
+    MISSING_BINARIES+=("$B")
+  fi
+done
+if [[ ${#MISSING_BINARIES[@]} -gt 0 ]] ; then
+  echo "Missing commands (${MISSING_BINARIES[*]}) to start this script. To install, run:"
+  echo "  $SUDO apt install --no-install-recommends ca-certificates curl git mawk sudo"
+  echo "  $SUDO yum install ca-certificates curl git mawk sudo"
+  exit 1
 fi
+
+CODEROOT="$(pwd)/dl"
+NJOBS=$(nproc)
+MEM_JOBS=$(awk '$1=="MemAvailable:" { print int($2/(1536*1024)); exit }' /proc/meminfo)
+if [[ $MEM_JOBS -lt 1 ]]; then
+  NJOBS=1
+  echo 'Insufficient available RAM, build may fail'
+elif [[ $MEM_JOBS -lt $NJOBS ]]; then
+  NJOBS=$MEM_JOBS
+fi
+PREFER_FROM=ppa
+PPA_PKGS=()
+
+ARGS=$(getopt -o 'hy' -l 'help,dir:,jobs:,no-wifi,ppa,source,cxx:,dummy-keychain,nfd:,psync:,nlsr:,tools:,traffic:,infoedit:,mininet:,mnwifi:,dl-only,ignore-existing' -- "$@")
+eval set -- "$ARGS"
+while true; do
+  case $1 in
+    -h|--help) HELP=1; shift;;
+    -y) CONFIRM=1; shift;;
+    --dir) CODEROOT=$2; shift 2;;
+    --jobs) NJOBS=$((0+$2)); shift 2;;
+    --no-wifi) NO_WIFI=1; shift;;
+    --ppa) PREFER_FROM=ppa; shift;;
+    --source) PREFER_FROM=source; shift;;
+    --cxx) CXX_VERSION=$2; NO_PPA=1; shift 2;;
+    --dummy-keychain) CXX_DUMMY_KEYCHAIN=1; NO_PPA=1; shift;;
+    --nfd) NFD_VERSION=$2; NO_PPA=1; shift 2;;
+    --psync) PSYNC_VERSION=$2; NO_PPA=1; shift 2;;
+    --nlsr) NLSR_VERSION=$2; NO_PPA=1; shift 2;;
+    --tools) TOOLS_VERSION=$2; NO_PPA=1; shift 2;;
+    --traffic) TRAFFIC_VERSION=$2; NO_PPA=1; shift 2;;
+    --infoedit) INFOEDIT_VERSION=$2; shift 2;;
+    --mininet) MININET_VERSION=$2; shift 2;;
+    --mnwifi) MNWIFI_VERSION=$2; shift 2;;
+    --dl-only) DL_ONLY=1; shift;;
+    --ignore-existing) IGNORE_EXISTING=1; shift;;
+    --) shift; break;;
+    *) exit 1;;
+  esac
+done
+
+if [[ $NJOBS -le 0 ]]; then
+  cat <<EOT
+--jobs must be a positive integer.
+Run ./install.sh -h to see help message.
+EOT
+  exit 1
+fi
+
+if [[ $HELP -eq 1 ]]; then
+  cat <<EOT
+./install.sh [OPTION]...
+
+General options:
+  -h  Display help and exit.
+  -y  Skip confirmation.
+  --dir=${CODEROOT}
+      Set where to download and compile the code.
+  --jobs=${NJOBS}
+      Set number of parallel jobs.
+  --no-wifi
+      Do not install Mininet-WiFi.
+
+Install preference options:
+  --ppa
+      Install available packages from named-data PPA.
+      This is the default on Ubuntu, unless a source code version option is used.
+  --source
+      Install all packages from source code.
+
+Source code version options:
+  --cxx=[VERSION]
+      Set ndn-cxx version.
+  --dummy-keychain
+      Patch ndn-cxx to use dummy KeyChain.
+      This disables signing and verifications, which allows experiments to run faster.
+      Use this option only if your scenario does not require signature verification.
+  --nfd=[VERSION]
+      Set NFD version.
+  --psync=[VERSION]
+      Set PSync version.
+  --nlsr=[VERSION]
+      Set NLSR version.
+  --tools=[VERSION]
+      Set NDN Essential Tools version.
+  --traffic=[VERSION]
+      Set NDN Traffic Generator version.
+  --infoedit=[VERSION]
+      Set infoedit version.
+  --mininet=[VERSION]
+      Set Mininet version.
+  --mnwifi=[VERSION]
+      Set Mininet-WiFi version.
+Acceptable version syntaxes:
+  * git commit/tag/branch, example: --nfd=NFD-0.7.1
+  * git repository (e.g. fork) and commit/tag/branch, example:
+      --nfd=https://github.com/named-data/NFD.git@NFD-0.7.1
+  * change,patchset on named-data Gerrit, example: --nfd=6236,8
+
+Misc options:
+  --dl-only
+      Download the source code only.
+      You may modify the code in ${CODEROOT} and then rerun this script to install them.
+  --ignore-existing
+      Ignore already installed binaries and libraries, and attempt to reinstall.
+      This is useful if you have modified source code checkout and want to install again.
+EOT
+  exit 0
+fi
+
+trap 'set +e; trap - ERR; echo "Error!"; exit 1;' ERR
+
+PKGDEPDIR="$(pwd)/util/pkgdep"
+if [[ -e /etc/os-release ]]; then
+  source /etc/os-release
+fi
+for id in ${ID,,} ${ID_LIKE,,}; do
+  if [[ -e $PKGDEPDIR/$id.sh ]]; then
+    source "$PKGDEPDIR/$id.sh"
+    source "$PKGDEPDIR/common.sh"
+    exit 0
+  fi
+done
+echo "Unsupported platform ${ID}, aborting"
+exit 1
diff --git a/minindn/util.py b/minindn/util.py
index b7d060c..23092da 100644
--- a/minindn/util.py
+++ b/minindn/util.py
@@ -27,7 +27,6 @@
 from six.moves.urllib.parse import quote
 
 from mininet.cli import CLI
-from mn_wifi.cli import CLI as CLI_wifi
 
 sshbase = ['ssh', '-q', '-t', '-i/home/mininet/.ssh/id_rsa']
 scpbase = ['scp', '-i', '/home/mininet/.ssh/id_rsa']
@@ -90,7 +89,15 @@
     def __init__(self, mininet, stdin=sys.stdin, script=None):
         CLI.__init__(self, mininet, stdin, script)
 
-class MiniNDNWifiCLI(CLI_wifi):
-    prompt = 'mini-ndn-wifi> '
-    def __init__(self, mininet, stdin=sys.stdin, script=None):
-        CLI_wifi.__init__(self, mininet, stdin, script)
+try:
+    from mn_wifi.cli import CLI as CLI_wifi
+
+    class MiniNDNWifiCLI(CLI_wifi):
+        prompt = 'mini-ndn-wifi> '
+        def __init__(self, mininet, stdin=sys.stdin, script=None):
+            CLI_wifi.__init__(self, mininet, stdin, script)
+
+except ImportError:
+    class MiniNDNWifiCLI:
+        def __init__(self):
+            raise ImportError('Mininet-WiFi is not installed')
diff --git a/util/patches/ndn-cxx-dummy-keychain-from-ndnsim.patch b/util/patches/ndn-cxx-dummy-keychain.patch
similarity index 100%
rename from util/patches/ndn-cxx-dummy-keychain-from-ndnsim.patch
rename to util/patches/ndn-cxx-dummy-keychain.patch
diff --git a/util/pkgdep/common.sh b/util/pkgdep/common.sh
new file mode 100644
index 0000000..9105fa2
--- /dev/null
+++ b/util/pkgdep/common.sh
@@ -0,0 +1,288 @@
+# -*- Mode:bash; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+#
+# Copyright (C) 2015-2021, The University of Memphis,
+#                          Arizona Board of Regents,
+#                          Regents of the University of California.
+#
+# This file is part of Mini-NDN.
+# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
+#
+# Mini-NDN is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Mini-NDN is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Mini-NDN, e.g., in COPYING.md file.
+# If not, see <http://www.gnu.org/licenses/>.
+
+# needed by Python version detection logic in Mininet & Mininet-WiFi install script
+export PYTHON=python3
+
+# DEP_INFO key should match *_VERSION variable name.
+# DEP_INFO entry should have these comma separated fields:
+# [0] local directory name
+# [1] dep name
+# [2] PPA package name
+# [3] GitHub repository (HTTPS)
+# [4] Gerrit repository (repo name only)
+declare -A DEP_INFO
+DEP_INFO=(
+  ["CXX"]="ndn-cxx,ndn-cxx,libndn-cxx-dev,https://github.com/named-data/ndn-cxx.git,ndn-cxx"
+  ["NFD"]="NFD,NFD,nfd,https://github.com/named-data/NFD.git,NFD"
+  ["PSYNC"]="PSync,PSync,libpsync-dev,https://github.com/named-data/PSync.git,PSync"
+  ["NLSR"]="NLSR,NLSR,nlsr,https://github.com/named-data/NLSR.git,NLSR"
+  ["TOOLS"]="ndn-tools,NDN Essential Tools,ndn-tools,https://github.com/named-data/ndn-tools.git,ndn-tools"
+  ["TRAFFIC"]="ndn-traffic-generator,NDN Traffic Generator,ndn-traffic-generator,https://github.com/named-data/ndn-traffic-generator.git,ndn-traffic-generator"
+  ["INFOEDIT"]="infoedit,infoedit,,https://github.com/NDN-Routing/infoedit.git,"
+  ["MININET"]="mininet,Mininet,,https://github.com/mininet/mininet.git,"
+  ["MNWIFI"]="mininet-wifi,Mininet-WiFi,,https://github.com/intrig-unicamp/mininet-wifi.git,"
+)
+
+# command to detect dependency existence
+# if not specified, dependency is assumed to not exist
+declare -A DEP_DETECT
+DEP_DETECT=(
+  ["CXX"]="pkg-config libndn-cxx"
+  ["NFD"]="command -v nfd"
+  ["PSYNC"]="pkg-config PSync"
+  ["NLSR"]="command -v nlsr"
+  ["TOOLS"]="command -v ndnping && command -v ndncatchunks"
+  ["TRAFFIC"]="command -v ndn-traffic-client"
+  ["INFOEDIT"]="command -v infoedit"
+  ["MININET"]="command -v mn && command -v ofdatapath && $PYTHON -m pip show mininet"
+  ["MNWIFI"]="$PYTHON -m pip show mininet-wifi"
+)
+
+# non-Waf build & install command
+build_INFOEDIT() {
+  make -j${NJOBS}
+  $SUDO make install
+}
+build_MININET() {
+  ./util/install.sh -s ${CODEROOT} -nv
+  if ! command -v ofdatapath >/dev/null; then
+    rm -rf ${CODEROOT}/openflow
+    ./util/install.sh -s ${CODEROOT} -f
+  fi
+
+  $SUDO $PYTHON setup.py develop
+  $SUDO cp /usr/local/bin/mn /usr/local/bin/mn.mininet
+}
+build_MNWIFI() {
+  # issue: util/install.sh attempts to patch hostap every time, causing "Assume -R?" prompt
+  # during reinstalls
+  # workaround: revert hostap repository to clean state
+  $SUDO git -C hostap clean -fdx || true
+  $SUDO git -C hostap checkout -- . || true
+
+  # issue: util/install.sh is not using 'sudo' where needed
+  # solution: run whole script in 'sudo'
+  $SUDO env PYTHON="$PYTHON" ./util/install.sh -Wl
+
+  # issue: setup.py reports "Cannot load backend 'TkAgg' which requires the 'tk' interactive
+  # framework, as 'headless' is currently running" when running over SSH
+  # workaround: pretend to have X11 display
+  $SUDO env DISPLAY=:0 $PYTHON setup.py develop
+  $SUDO cp /usr/local/bin/mn /usr/local/bin/mn.wifi
+
+  # make 'mn' command refer to Mininet's version, which does not require X11
+  if [[ -x /usr/local/bin/mn.mininet ]]; then
+    $SUDO cp /usr/local/bin/mn.mininet /usr/local/bin/mn
+  fi
+}
+
+# Waf configure options
+declare -A DEP_WAFOPTS
+DEP_WAFOPTS=(
+  ["NFD"]="--without-websocket"
+  ["PSYNC"]="--with-examples"
+)
+
+# return whether dep is installed
+dep_exists() {
+  if [[ $IGNORE_EXISTING -eq 1 ]]; then
+    return 2
+  fi
+  local DETECT="${DEP_DETECT[$1]}"
+  if [[ -n $DETECT ]] && bash -c "$DETECT" &>/dev/null; then
+    return 0
+  fi
+  return 1
+}
+
+# set to 1 if dep needs downloading
+declare -A NEED_DL
+
+# display prompt on what to do with dep, populate NEED_DL
+dep_prompt() {
+  local INFO=()
+  IFS=',' read -a INFO <<< "${DEP_INFO[$1]}"
+  local VERSION_VAR="$1_VERSION"
+  local VERSION="${!VERSION_VAR}"
+  if [[ -z $VERSION ]]; then
+    VERSION='(default branch)'
+  fi
+  local DLDIR="${CODEROOT}/${INFO[0]}"
+  if dep_exists $1; then
+    echo "Will use existing ${INFO[1]}"
+  elif [[ $PREFER_FROM == ppa ]] && [[ -n ${INFO[2]} ]]; then
+    echo "Will install ${INFO[1]} from named-data PPA"
+    PPA_PKGS+=("${INFO[2]}")
+  elif [[ -d "$DLDIR" ]]; then
+    if [[ $DL_ONLY -ne 1 ]]; then
+      echo "Will install ${INFO[1]} from local checkout ${DLDIR}"
+    fi
+  else
+    NEED_DL[$1]=1
+    if [[ $DL_ONLY -eq 1 ]]; then
+      echo "Will checkout ${INFO[1]} ${VERSION} to ${DLDIR}"
+    else
+      echo "Will download and install ${INFO[1]} ${VERSION}"
+    fi
+  fi
+}
+
+# download dep source code
+dep_checkout() {
+  if [[ ${NEED_DL[$1]} -ne 1 ]]; then
+    return
+  fi
+  local INFO=()
+  IFS=',' read -a INFO <<< "${DEP_INFO[$1]}"
+  local VERSION_VAR="$1_VERSION"
+  local VERSION="${!VERSION_VAR}"
+  local DLDIR="${CODEROOT}/${INFO[0]}"
+
+  if [[ -n ${INFO[4]} ]] && [[ "$VERSION" =~ ^[0-9]+,[0-9]+$ ]]; then
+    local REPO="https://gerrit.named-data.net/${INFO[4]}"
+    local GERRIT_CHANGE=${VERSION%,*}
+    local GERRIT_PATCHSET=${VERSION#*,}
+    echo "Downloading ${INFO[2]} from Gerrit (patchset ${GERRIT_CHANGE},${GERRIT_PATCHSET})"
+    git clone "$REPO" "$DLDIR"
+    git -C "$DLDIR" fetch origin "refs/changes/${GERRIT_CHANGE:(-2)}/${GERRIT_CHANGE}/${GERRIT_PATCHSET}"
+    git -C "$DLDIR" -c advice.detachedHead=false checkout FETCH_HEAD
+  elif [[ -z $VERSION ]]; then
+    echo "Downloading ${INFO[1]} from GitHub (default branch)"
+    git clone "${INFO[3]}" "$DLDIR"
+  elif [[ "$VERSION" =~ @ ]]; then
+    local REPO=${VERSION%@*}
+    local BRANCH=${VERSION#*@}
+    echo "Downloading ${INFO[1]} from ${REPO} (branch ${BRANCH})"
+    git clone "$REPO" "$DLDIR"
+    git -C "$DLDIR" -c advice.detachedHead=false checkout "$BRANCH"
+  else
+    echo "Downloading ${INFO[1]} from GitHub (branch ${VERSION})"
+    git clone "${INFO[3]}" "$DLDIR"
+    git -C "$DLDIR" -c advice.detachedHead=false checkout "$VERSION"
+  fi
+  git submodule update --init --recursive --progress
+}
+
+# install dep from source code
+dep_install() {
+  local INFO=()
+  IFS=',' read -a INFO <<< "${DEP_INFO[$1]}"
+  local DLDIR="${CODEROOT}/${INFO[0]}"
+  if dep_exists $1 || ! [[ -d "$DLDIR" ]]; then
+    return
+  fi
+  pushd "$DLDIR"
+
+  local FN="build_$1"
+  if declare -F $FN >/dev/null; then
+    echo "Installing ${INFO[1]} with custom command"
+    $FN
+  elif [[ -x waf ]]; then
+    echo "Installing ${INFO[1]} with Waf"
+    $PYTHON ./waf configure ${DEP_WAFOPTS[$1]}
+    $PYTHON ./waf -j${NJOBS}
+    $SUDO $PYTHON ./waf install
+  fi
+  popd
+}
+
+if [[ $PPA_AVAIL -ne 1 ]] || [[ $NO_PPA -eq 1 ]]; then
+  PREFER_FROM=source
+fi
+
+# dep install order, excluding ndn-cxx
+DEPLIST=(NFD PSYNC NLSR TOOLS TRAFFIC INFOEDIT MININET)
+if [[ $NO_WIFI -ne 1 ]]; then
+  DEPLIST+=(MNWIFI)
+fi
+
+echo "Will download to ${CODEROOT}"
+echo 'Will install compiler and build tools'
+dep_prompt CXX
+if [[ $CXX_DUMMY_KEYCHAIN -eq 1 ]]; then
+  echo 'Will patch ndn-cxx to use dummy KeyChain'
+fi
+for DEP in "${DEPLIST[@]}"; do
+  dep_prompt $DEP
+done
+if [[ $DL_ONLY -ne 1 ]]; then
+  echo "Will compile with ${NJOBS} parallel jobs"
+  echo "Will install Mini-NDN package"
+fi
+
+if [[ $CONFIRM -ne 1 ]]; then
+  read -p 'Press ENTER to continue or CTRL+C to abort '
+fi
+
+install_pkgs
+
+if [[ -z $SKIPPYTHONCHECK ]]; then
+  PYTHON_VERSION=$($PYTHON --version)
+  SUDO_PYTHON_VERSION=$($SUDO $PYTHON --version)
+  if [[ "$PYTHON_VERSION" != "$SUDO_PYTHON_VERSION" ]]; then
+    cat <<EOT
+In your system, '${PYTHON}' is ${PYTHON_VERSION} and '$SUDO ${PYTHON}' is ${SUDO_PYTHON_VERSION}
+You must manually resolve the conflict, e.g. delete excess Python installation or change $PATH
+To bypass this check, set the environment variable SKIPPYTHONCHECK=1
+EOT
+    exit 1
+  fi
+fi
+
+if ! mkdir -p "${CODEROOT}" 2>/dev/null; then
+  $SUDO mkdir -p "${CODEROOT}"
+  $SUDO chown $(id -u) "${CODEROOT}"
+fi
+dep_checkout CXX
+if [[ $CXX_DUMMY_KEYCHAIN -eq 1 ]]; then
+  echo 'Patching ndn-cxx to use dummy KeyChain'
+  if ! git -C "${CODEROOT}/ndn-cxx" apply --index < "${PKGDEPDIR}/../patches/ndn-cxx-dummy-keychain.patch"; then
+    echo 'Cannot patch ndn-cxx to use dummy KeyChain (possibly already patched)'
+  fi
+fi
+for DEP in "${DEPLIST[@]}"; do
+  dep_checkout $DEP
+done
+
+if [[ $DL_ONLY -eq 1 ]]; then
+  cat <<EOT
+Source code has been downloaded to ${CODEROOT}
+You may make changes or checkout different versions
+Run this script again without --dl-only to install from local checkout
+EOT
+  exit 0
+fi
+
+prepare_ld
+for DEP in CXX "${DEPLIST[@]}"; do
+  dep_install $DEP
+done
+$SUDO ldconfig
+
+DESTDIR=/usr/local/etc/mini-ndn
+$SUDO install -d -m0755 "$DESTDIR"
+find topologies/ -name '*.conf' | xargs $SUDO install -m0644 -t "$DESTDIR/"
+$SUDO $PYTHON setup.py develop
+
+echo 'MiniNDN installation completed successfully'
diff --git a/util/pkgdep/debian-like.sh b/util/pkgdep/debian-like.sh
new file mode 100644
index 0000000..52fb9a5
--- /dev/null
+++ b/util/pkgdep/debian-like.sh
@@ -0,0 +1,66 @@
+# -*- Mode:bash; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+#
+# Copyright (C) 2015-2021, The University of Memphis,
+#                          Arizona Board of Regents,
+#                          Regents of the University of California.
+#
+# This file is part of Mini-NDN.
+# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
+#
+# Mini-NDN is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Mini-NDN is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Mini-NDN, e.g., in COPYING.md file.
+# If not, see <http://www.gnu.org/licenses/>.
+
+# APT packages, written in alphabetical order.
+APT_PKGS=(
+  build-essential
+  ca-certificates
+  git
+  libboost-atomic-dev
+  libboost-chrono-dev
+  libboost-date-time-dev
+  libboost-filesystem-dev
+  libboost-iostreams-dev
+  libboost-log-dev
+  libboost-program-options-dev
+  libboost-regex-dev
+  libboost-stacktrace-dev
+  libboost-system-dev
+  libboost-thread-dev
+  libpcap-dev
+  libsqlite3-dev
+  libssl-dev
+  libsystemd-dev
+  pkg-config
+  python-is-python3
+  python3-pip
+  software-properties-common
+  tshark
+)
+
+if [[ $NO_WIFI -ne 1 ]]; then
+  APT_PKGS+=(network-manager)
+fi
+
+install_pkgs() {
+  $SUDO apt-get update
+  $SUDO env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends "${APT_PKGS[@]}"
+  if [[ $PPA_AVAIL -eq 1 ]] && [[ ${#PPA_PKGS[@]} -gt 0 ]]; then
+    $SUDO add-apt-repository -y -u ppa:named-data/ppa
+    $SUDO env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends "${PPA_PKGS[@]}"
+  fi
+}
+
+prepare_ld() {
+  return
+}
diff --git a/util/pkgdep/debian.sh b/util/pkgdep/debian.sh
new file mode 100644
index 0000000..3496e68
--- /dev/null
+++ b/util/pkgdep/debian.sh
@@ -0,0 +1,35 @@
+# -*- Mode:bash; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+#
+# Copyright (C) 2015-2021, The University of Memphis,
+#                          Arizona Board of Regents,
+#                          Regents of the University of California.
+#
+# This file is part of Mini-NDN.
+# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
+#
+# Mini-NDN is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Mini-NDN is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Mini-NDN, e.g., in COPYING.md file.
+# If not, see <http://www.gnu.org/licenses/>.
+
+if [[ $VERSION_ID -lt 11 ]]; then
+  cat <<EOT
+Debian 11 or newer is required
+Installation on older versions may fail
+EOT
+fi
+
+source "$PKGDEPDIR/debian-like.sh"
+
+APT_PKGS+=(
+  libigraph-dev
+)
diff --git a/util/pkgdep/fedora.sh b/util/pkgdep/fedora.sh
new file mode 100644
index 0000000..b48dac2
--- /dev/null
+++ b/util/pkgdep/fedora.sh
@@ -0,0 +1,57 @@
+# -*- Mode:bash; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+#
+# Copyright (C) 2015-2021, The University of Memphis,
+#                          Arizona Board of Regents,
+#                          Regents of the University of California.
+#
+# This file is part of Mini-NDN.
+# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
+#
+# Mini-NDN is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Mini-NDN is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Mini-NDN, e.g., in COPYING.md file.
+# If not, see <http://www.gnu.org/licenses/>.
+
+if [[ $VERSION_ID -lt 33 ]]; then
+  cat <<EOT
+Fedora 33 or newer is required
+Installation on older versions may fail
+EOT
+fi
+
+# DNF packages, written in alphabetical order.
+DNF_PKGS=(
+  boost-devel
+  ca-certificates
+  gcc-c++
+  libpcap-devel
+  openssl-devel
+  python3-pip
+  sqlite-devel
+  systemd-devel
+)
+
+install_pkgs() {
+  $SUDO dnf install -y "${DNF_PKGS[@]}"
+}
+
+prepare_ld() {
+  if ! $SUDO ldconfig -v 2>/dev/null | grep -q /usr/local/lib64; then 
+    echo 'Enabling /usr/local/lib64 in dynamic linker'
+    $SUDO mkdir -p /etc/ld.so.conf.d
+    echo /usr/local/lib64 | $SUDO tee /etc/ld.so.conf.d/usr-local-lib64.conf >/dev/null
+  fi
+}
+
+# ndn-cxx installs to /usr/local/lib64, but `pkg-config --libs libndn-cxx` by default strips out
+# `-L/usr/local/lib64` flag. This environ or `pkg-config --keep-system-libs` prevents that.
+export PKG_CONFIG_ALLOW_SYSTEM_LIBS=1
diff --git a/util/pkgdep/ubuntu.sh b/util/pkgdep/ubuntu.sh
new file mode 100644
index 0000000..91abc29
--- /dev/null
+++ b/util/pkgdep/ubuntu.sh
@@ -0,0 +1,37 @@
+# -*- Mode:bash; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+#
+# Copyright (C) 2015-2021, The University of Memphis,
+#                          Arizona Board of Regents,
+#                          Regents of the University of California.
+#
+# This file is part of Mini-NDN.
+# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
+#
+# Mini-NDN is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Mini-NDN is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Mini-NDN, e.g., in COPYING.md file.
+# If not, see <http://www.gnu.org/licenses/>.
+
+if [[ $(expr $VERSION_ID '<' 20.04) == 1 ]]; then
+  cat <<EOT
+Ubuntu 20.04 or newer is required
+Installation on older versions may fail
+EOT
+fi
+
+source "$PKGDEPDIR/debian-like.sh"
+
+APT_PKGS+=(
+  libigraph0-dev
+)
+
+PPA_AVAIL=1
