-
Notifications
You must be signed in to change notification settings - Fork 28
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