unplugged-system/external/ot-br-posix/script/bootstrap

172 lines
5.7 KiB
Bash
Executable File

#!/bin/bash
#
# Copyright (c) 2017, The OpenThread Authors.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of the copyright holder nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# Description:
# This script resolves all dependencies.
#
# shellcheck source=script/_initrc
. "$(dirname "$0")"/_initrc
NAT64_SERVICE="${NAT64_SERVICE:-tayga}"
install_packages_apt()
{
sudo apt-get update
sudo apt-get install --no-install-recommends -y \
wget \
iproute2 \
iputils-ping \
libreadline-dev \
libncurses-dev
sudo apt-get install --no-install-recommends -y build-essential ninja-build cmake
with RELEASE || sudo apt-get install --no-install-recommends -y libcpputest-dev
sudo apt-get install --no-install-recommends -y rsyslog
# For DBus server
sudo apt-get install --no-install-recommends -y libdbus-1-dev
# mDNS
sudo apt-get install --no-install-recommends -y libavahi-client3 libavahi-common-dev libavahi-client-dev avahi-daemon
(MDNS_RESPONDER_SOURCE_NAME=mDNSResponder-1310.80.1 \
&& cd /tmp \
&& wget -4 --no-check-certificate https://opensource.apple.com/tarballs/mDNSResponder/$MDNS_RESPONDER_SOURCE_NAME.tar.gz \
&& tar xvf $MDNS_RESPONDER_SOURCE_NAME.tar.gz \
&& cd /tmp/$MDNS_RESPONDER_SOURCE_NAME/Clients \
&& sed -i '/#include <ctype.h>/a #include <stdarg.h>' dns-sd.c \
&& sed -i '/#include <ctype.h>/a #include <sys/param.h>' dns-sd.c \
&& cd /tmp/$MDNS_RESPONDER_SOURCE_NAME/mDNSPosix \
&& make os=linux && sudo make install os=linux)
# Boost
sudo apt-get install --no-install-recommends -y libboost-dev libboost-filesystem-dev libboost-system-dev
# nat64
without NAT64 || {
"$NAT64_SERVICE" != "tayga" || sudo apt-get install --no-install-recommends -y tayga
sudo apt-get install --no-install-recommends -y iptables
}
# dns64
without DNS64 || {
if [ "$PLATFORM" = "beagleboneblack" ]; then
# dnsmasq needs to be stopped before bind9 is installed
sudo systemctl disable dnsmasq
sudo systemctl stop dnsmasq
fi
sudo apt-get install --no-install-recommends -y bind9
# Resolvconf cannot be installed inside docker environment
if without DOCKER; then
sudo apt-get install --no-install-recommends -y resolvconf
fi
}
# network-manager
without NETWORK_MANAGER || sudo apt-get install --no-install-recommends -y dnsmasq network-manager
# dhcpcd5
without DHCPV6_PD || sudo apt-get install --no-install-recommends -y dhcpcd5
# libjsoncpp
sudo apt-get install --no-install-recommends -y libjsoncpp-dev
# reference device
without REFERENCE_DEVICE || sudo apt-get install --no-install-recommends -y radvd dnsutils
# backbone-router
without BACKBONE_ROUTER || sudo apt-get install --no-install-recommends -y libnetfilter-queue1 libnetfilter-queue-dev
# web dependencies
without WEB_GUI || command -v npm || sudo apt-get install --no-install-recommends -y nodejs npm
# firewall
sudo apt-get install -y iptables ipset
}
install_packages_opkg()
{
die 'opkg not supported currently'
}
install_packages_rpm()
{
if have dnf; then
PM=dnf
else
PM=yum
fi
sudo $PM install -y gcc gcc-c++
with RELEASE || sudo $PM install -y cmake ninja-build
sudo $PM install -y dbus-devel
sudo $PM install -y avahi avahi-devel
sudo $PM install -y boost-devel boost-filesystem boost-system
"$NAT64_SERVICE" != "tayga" || sudo $PM install -y tayga
sudo $PM install -y iptables
sudo $PM install -y jsoncpp-devel
sudo $PM install -y wget
}
install_packages_brew()
{
brew install boost cmake cpputest dbus jsoncpp ninja
}
install_packages_source()
{
die 'source not supported currently'
}
install_packages()
{
if have apt-get; then
install_packages_apt
elif have rpm; then
install_packages_rpm
elif have opkg; then
install_packages_opkg
elif have brew; then
install_packages_brew
else
install_packages_source
fi
}
main()
{
. "$BEFORE_HOOK"
# TODO remove `|| true` after docker hub builder gets its git upgraded
git submodule update --init --recursive --depth 1 || true
install_packages
. "$AFTER_HOOK"
}
main