1#!/bin/bash 2# Setup development environment for RPM based systems such as Red Hat, Centos, Fedora, openSUSE 3# 4# Wireshark - Network traffic analyzer 5# By Gerald Combs <gerald@wireshark.org> 6# Copyright 1998 Gerald Combs 7# 8# SPDX-License-Identifier: GPL-2.0-or-later 9# 10# We drag in tools that might not be needed by all users; it's easier 11# that way. 12# 13 14if [ "$1" = "--help" ] 15then 16 echo "\nUtility to setup a rpm-based system for Wireshark Development.\n" 17 echo "The basic usage installs the needed software\n\n" 18 echo "Usage: $0 [--install-optional] [...other options...]\n" 19 echo "\t--install-optional: install optional software as well" 20 echo "\t--install-rpm-deps: install packages required to build the .rpm file\\n" 21 echo "\t[other]: other options are passed as-is to the packet manager\n" 22 exit 1 23fi 24 25# Check if the user is root 26if [ $(id -u) -ne 0 ] 27then 28 echo "You must be root." 29 exit 1 30fi 31 32ADDITIONAL=0 33RPMDEPS=0 34for arg; do 35 case $arg in 36 --install-optional) 37 ADDITIONAL=1 38 ;; 39 --install-rpm-deps) 40 RPMDEPS=1 41 ;; 42 *) 43 OPTIONS="$OPTIONS $arg" 44 ;; 45 esac 46done 47 48BASIC_LIST="cmake \ 49 gcc \ 50 gcc-c++ \ 51 flex \ 52 python3 \ 53 perl \ 54 desktop-file-utils \ 55 git \ 56 glib2-devel \ 57 libpcap-devel \ 58 zlib-devel \ 59 libgcrypt-devel" 60 61ADDITIONAL_LIST="libcap-devel \ 62 libssh-devel \ 63 krb5-devel \ 64 perl-Parse-Yapp \ 65 snappy-devel \ 66 minizip-devel \ 67 lz4 \ 68 libxml2-devel \ 69 spandsp-devel \ 70 systemd-devel" 71 72# Uncomment to add PNG compression utilities used by compress-pngs: 73# ADDITIONAL_LIST="$ADDITIONAL_LIST \ 74# advancecomp \ 75# optipng \ 76# oxipng \ 77# pngcrush" 78 79# XXX 80RPMDEPS_LIST="rpm-build" 81 82# Guess which package manager we will use 83for PM in zypper dnf yum ''; do 84 if type "$PM" >/dev/null 2>&1; then 85 break 86 fi 87done 88 89if [ -z $PM ] 90then 91 echo "No package managers found, exiting" 92 exit 1 93fi 94 95case $PM in 96 zypper) 97 PM_OPT="--non-interactive" 98 PM_SEARCH="search -x --provides" 99 ;; 100 dnf) 101 PM_SEARCH="info" 102 ;; 103 yum) 104 PM_SEARCH="info" 105 ;; 106esac 107 108echo "Using $PM ($PM_SEARCH)" 109 110# Adds package $2 to list variable $1 if the package is found 111add_package() { 112 local list="$1" pkgname="$2" 113 114 # fail if the package is not known 115 $PM $PM_SEARCH "$pkgname" &> /dev/null || return 1 116 117 # package is found, append it to list 118 eval "${list}=\"\${${list}} \${pkgname}\"" 119} 120 121# Adds packages $2-$n to list variable $1 if all the packages are found 122add_packages() { 123 local list="$1" pkgnames="${@:2}" 124 125 # fail if any package is not known 126 for pkgname in $pkgnames; do 127 $PM $PM_SEARCH "$pkgname" &> /dev/null || return 1 128 done 129 130 # all packages are found, append it to list 131 eval "${list}=\"\${${list}} \${pkgnames}\"" 132} 133 134add_package BASIC_LIST cmake3 || add_package BASIC_LIST cmake || 135echo "cmake is unavailable" >&2 136 137add_package BASIC_LIST glib2 || add_package BASIC_LIST libglib-2_0-0 || 138echo "glib2 is unavailable" >&2 139 140# lua51, lua51-devel: OpenSUSE Leap 42.3 (lua would be fine too, as it installs lua52), OpenSUSE Leap 15.0 (lua installs lua53, so it wouldn't work) 141# compat-lua, compat-lua-devel: Fedora 28, Fedora 29, CentOS 8 142# lua, lua-devel: CentOS 7 143add_package BASIC_LIST lua51-devel || add_package BASIC_LIST compat-lua-devel || add_package BASIC_LIST lua-devel || 144echo "lua devel is unavailable" >&2 145 146add_package BASIC_LIST lua51 || add_package BASIC_LIST compat-lua || add_package BASIC_LIST lua || 147echo "lua is unavailable" >&2 148 149add_package BASIC_LIST libpcap || add_package BASIC_LIST libpcap1 || 150echo "libpcap is unavailable" >&2 151 152add_package BASIC_LIST zlib || add_package BASIC_LIST libz1 || 153echo "zlib is unavailable" >&2 154 155add_package BASIC_LIST c-ares-devel || add_package BASIC_LIST libcares-devel || 156echo "libcares-devel is unavailable" >&2 157 158# qt5-linguist: CentOS, Fedora 159# libqt5-linguist-devel: OpenSUSE 160add_package BASIC_LIST qt5-linguist || 161add_package BASIC_LIST libqt5-linguist-devel || 162echo "Qt5 linguist is unavailable" >&2 163 164# qt5-qtmultimedia: CentOS, Fedora, pulls in qt5-qtbase-devel (big dependency list!) 165# libqt5-qtmultimedia-devel: OpenSUSE, pulls in Core, Gui, Multimedia, Network, Widgets 166# OpenSUSE additionally has a separate Qt5PrintSupport package. 167add_package BASIC_LIST qt5-qtmultimedia-devel || 168add_packages BASIC_LIST libqt5-qtmultimedia-devel libQt5PrintSupport-devel || 169echo "Qt5 is unavailable" >&2 170 171# This in only required (and available) on OpenSUSE 172add_package BASIC_LIST update-desktop-files || 173echo "update-desktop-files is unavailable" >&2 174 175add_package BASIC_LIST perl-podlators || 176echo "perl-podlators unavailable" >&2 177 178# rubygem-asciidoctor.noarch: Centos 7, Fedora 179# ruby2.5-rubygem-asciidoctor: openSUSE 15.2 180# You will get nothing and you will like it: CentOS 8 181add_package RPMDEPS_LIST rubygem-asciidoctor.noarch || add_package RPMDEPS_LIST ruby2.5-rubygem-asciidoctor || 182echo "asciidoctor is unavailable" >&2 183 184 185# libcap: CentOS 7, Fedora 28, Fedora 29 186# libcap2: OpenSUSE Leap 42.3, OpenSUSE Leap 15.0 187add_package ADDITIONAL_LIST libcap || add_package ADDITIONAL_LIST libcap2 || 188echo "libcap is unavailable" >&2 189 190add_package ADDITIONAL_LIST nghttp2-devel || add_package ADDITIONAL_LIST libnghttp2-devel || 191echo "nghttp2 is unavailable" >&2 192 193add_package ADDITIONAL_LIST snappy || add_package ADDITIONAL_LIST libsnappy1 || 194echo "snappy is unavailable" >&2 195 196add_package ADDITIONAL_LIST libzstd-devel || echo "zstd is unavailable" >&2 197 198add_package ADDITIONAL_LIST lz4-devel || add_package ADDITIONAL_LIST liblz4-devel || 199echo "lz4 devel is unavailable" >&2 200 201add_package ADDITIONAL_LIST libcap-progs || echo "cap progs are unavailable" >&2 202 203add_package ADDITIONAL_LIST libmaxminddb-devel || 204echo "MaxMind DB devel is unavailable" >&2 205 206add_package ADDITIONAL_LIST gnutls-devel || add_package ADDITIONAL_LIST libgnutls-devel || 207echo "gnutls devel is unavailable" >&2 208 209add_package ADDITIONAL_LIST gettext-devel || add_package ADDITIONAL_LIST gettext-tools || 210echo "Gettext devel is unavailable" >&2 211 212add_package ADDITIONAL_LIST perl-Pod-Html || 213echo "perl-Pod-Html is unavailable" >&2 214 215add_package ADDITIONAL_LIST ninja || add_package ADDITIONAL_LIST ninja-build || 216echo "ninja is unavailable" >&2 217 218add_package ADDITIONAL_LIST libxslt || add_package ADDITIONAL_LIST libxslt1 || 219echo "xslt is unavailable" >&2 220 221add_package ADDITIONAL_LIST brotli-devel || add_packages ADDITIONAL_LIST libbrotli-devel libbrotlidec1 || 222echo "brotli is unavailable" >&2 223 224add_package ADDITIONAL_LIST git-review || 225echo "git-review is unavailabe" >&2 226 227add_package ADDITIONAL_LIST speexdsp-devel || add_package ADDITIONAL_LIST speex-devel || 228echo "speex is unavailable" >&2 229 230add_package ADDITIONAL_LIST libnl3-devel || add_package ADDITIONAL_LIST libnl-devel || 231echo "libnl3/libnl are unavailable" >&2 232 233add_package ADDITIONAL_LIST ilbc-devel || 234echo "ilbc is unavailable" >&2 235 236# opus-devel: RHEL/CentOS, Fedora 237# libopus-devel: OpenSUSE 238add_package ADDITIONAL_LIST opus-devel || add_package ADDITIONAL_LIST libopus-devel || 239echo "opus is unavailable" >&2 240 241add_package ADDITIONAL_LIST bcg729-devel || 242echo "bcg729 is unavailable" >&2 243 244# RHEL 8 / CentOS 8 are missing the -devel packages for sbc and libsmi due to 245# RH deciding not to ship all -devel packages. 246# https://wiki.centos.org/FAQ/CentOS8/UnshippedPackages 247# There are CentOS bugs filed to add them to the Devel repository and eventually 248# RHEL 8 CRB / CentOS PowerTools, but make them optional for now. 249# https://bugs.centos.org/view.php?id=16504 250# https://bugs.centos.org/view.php?id=17824 251add_package ADDITIONAL_LIST sbc-devel || 252echo "sbc is unavailable" 253 254add_package ADDITIONAL_LIST libsmi-devel || 255echo "libsmi is unavailable" 256 257ACTUAL_LIST=$BASIC_LIST 258 259# Now arrange for optional support libraries 260if [ $ADDITIONAL -ne 0 ] 261then 262 ACTUAL_LIST="$ACTUAL_LIST $ADDITIONAL_LIST" 263fi 264 265if [ $RPMDEPS -ne 0 ] 266then 267 ACTUAL_LIST="$ACTUAL_LIST $RPMDEPS_LIST" 268fi 269 270$PM $PM_OPT install $ACTUAL_LIST $OPTIONS 271 272if [ $ADDITIONAL -eq 0 ] 273then 274 echo -e "\n*** Optional packages not installed. Rerun with --install-optional to have them.\n" 275fi 276 277if [ $RPMDEPS -eq 0 ] 278then 279 printf "\n*** RPM packages build deps not installed. Rerun with --install-rpm-deps to have them.\n" 280fi 281