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
