Skip to content

Generate dependency tree for Zimbra Packages

Saket Patel edited this page Oct 11, 2022 · 1 revision

Using the script below, we can generate a dependency graph for individual packages and/or a combined graph for all Zimbra packages.

The below script is checked on Ubuntu 20 only

  • Install below packages
sudo apt install apt-rdepends debtree m4 graphviz
  • Run below script
#!/bin/bash

# Get list of zimbra packages
apt-cache search -n zimbra > packages.txt

# Read packages one by one and find out leaf nodes
while read -r package
do
        name=($(echo $package | cut -d' ' -f1))

        echo "Finding leaf nodes for $name"

        apt-rdepends $name 2>&1| grep "Depends:\|PreDepends:" | awk '{print $2}' | grep -v zimbra | sort -u >> leaf.txt
done < packages.txt

# Move generated leaf nodes to ~/.debtree/endlist
cat leaf.txt | sort -u > ~/.debtree/endlist
rm -f leaf.txt

echo "digraph zimbra {
define(\`digraph',\`subgraph')" > merge.m4

rm -Rf dot-files
rm -rf svg-files
mkdir dot-files
mkdir svg-files

# Read packages one by one and generate DOT files
while read -r package
do
        name=($(echo $package | cut -d' ' -f1))

        echo "Processing : $name"

        command=`debtree --condense --no-alternatives --quiet --rotate $name`
        echo $command >> "dot-files/$name.dot"

        # Generate individual SVG files
	dot -Tsvg -o "svg-files/$name.svg" "dot-files/$name.dot"

        # Include dot file inside m4 file
        echo "include(dot-files/$name.dot)" >> merge.m4
done < packages.txt

echo "}" >> merge.m4

# Final graphwiz file
m4 merge.m4 > final.dot

# Final SVG file
echo "BEWARE!!! Generating SVG may take much more time"
dot -Tsvg -o final.svg final.dot