mirror of
				https://github.com/vyos/vyos-build.git
				synced 2025-10-01 20:28:40 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			121 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
#
 | 
						|
# Copyright (C) 2020 VyOS maintainers and contributors
 | 
						|
#
 | 
						|
# This program is free software; you can redistribute it and/or modify
 | 
						|
# in order to easy exprort images built to "external" world
 | 
						|
# it under the terms of the GNU General Public License version 2 or later as
 | 
						|
# published by the Free Software Foundation.
 | 
						|
#
 | 
						|
# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
						|
 | 
						|
# Parse debian/control like content and extract packages required by the
 | 
						|
# Build-Depends statement. Return a string with all required packages.
 | 
						|
#
 | 
						|
# Code below copied from https://stackoverflow.com/a/47707412 - Thank You!
 | 
						|
get_build_depends () {
 | 
						|
    echo $(awk '
 | 
						|
        /^Build-Depends:/ || /^ / && deps {
 | 
						|
        sub(/^[^ ]+: /, "")
 | 
						|
        deps = 1
 | 
						|
        dep_str = dep_str ", " $0
 | 
						|
        next
 | 
						|
      }
 | 
						|
      { deps=0 }
 | 
						|
      END {
 | 
						|
        split(dep_str, dep_array, /, */)
 | 
						|
        for (d in dep_array) {
 | 
						|
          dep = dep_array[d]
 | 
						|
          gsub(/[^a-z0-9_.-].*$/, "", dep)
 | 
						|
          if (dep && !seen[dep]++) print dep
 | 
						|
        }
 | 
						|
      }' $1)
 | 
						|
}
 | 
						|
 | 
						|
get_runtime_depends () {
 | 
						|
    echo $(awk '
 | 
						|
        /^Depends:/ || /^ / && deps {
 | 
						|
        sub(/^[^ ]+: /, "")
 | 
						|
        deps = 1
 | 
						|
        dep_str = dep_str ", " $0
 | 
						|
        next
 | 
						|
      }
 | 
						|
      { deps=0 }
 | 
						|
      END {
 | 
						|
        split(dep_str, dep_array, /, */)
 | 
						|
        for (d in dep_array) {
 | 
						|
          dep = dep_array[d]
 | 
						|
          gsub(/[^a-z0-9_.-].*$/, "", dep)
 | 
						|
          if (dep && !seen[dep]++) print dep
 | 
						|
        }
 | 
						|
      }' $1)
 | 
						|
}
 | 
						|
 | 
						|
# Some packages are required prior to running this script
 | 
						|
BOOTSTRAP_PACKAGES="devscripts curl equivs"
 | 
						|
for pkg in $BOOTSTRAP_PACKAGES
 | 
						|
do
 | 
						|
    dpkg -s $pkg >/dev/null 2>&1
 | 
						|
    if [ $? -ne 0 ]; then
 | 
						|
        echo "Required package \"$pkg\" not installed"
 | 
						|
        exit 1
 | 
						|
    fi
 | 
						|
done
 | 
						|
 | 
						|
echo ""
 | 
						|
echo "Below you can find a list of packages that are required as build time"
 | 
						|
echo "dependency for the individual package"
 | 
						|
echo ""
 | 
						|
echo "The generated content can be used to populate a file to provision"
 | 
						|
echo "e.g. a native build host or a Docker container"
 | 
						|
echo ""
 | 
						|
echo ""
 | 
						|
 | 
						|
GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
 | 
						|
 | 
						|
# First we need to get vyos-world so we know all individual packages for VyOS
 | 
						|
curl -L https://github.com/vyos/vyos-world/raw/$GIT_BRANCH/debian/control \
 | 
						|
  --output /tmp/vyos-world.control --retry 100 --retry-delay 1 --silent
 | 
						|
 | 
						|
VYOS_PACKAGES=$(get_runtime_depends /tmp/vyos-world.control)
 | 
						|
rm -f /tmp/vyos-world.control
 | 
						|
for pkg in $VYOS_PACKAGES
 | 
						|
do
 | 
						|
    # Check if repo exists
 | 
						|
    res=$(curl -o /dev/null --silent -Iw '%{http_code}' https://github.com/vyos/$pkg)
 | 
						|
    if [[ $res -ne 200 ]]; then
 | 
						|
        continue
 | 
						|
    fi
 | 
						|
 | 
						|
    CTRLFILE=/tmp/$pkg.control
 | 
						|
    curl -L https://github.com/vyos/$pkg/raw/$GIT_BRANCH/debian/control \
 | 
						|
      --output $CTRLFILE --retry 100 --retry-delay 1 --silent
 | 
						|
 | 
						|
    declare -a array
 | 
						|
    declare -i length cnt
 | 
						|
 | 
						|
    array=($(get_build_depends $CTRLFILE))
 | 
						|
    length=${#array[@]}
 | 
						|
    cnt=0
 | 
						|
 | 
						|
    echo "# Packages needed to build '$pkg' from https://github.com/vyos/$pkg"
 | 
						|
    echo "apt-get install -y \\"
 | 
						|
    for name in "${array[@]}"; do
 | 
						|
        cnt=$((cnt + 1))
 | 
						|
        if [[ "$cnt" -eq "$length" ]]; then
 | 
						|
            echo "  $name"
 | 
						|
        else
 | 
						|
            echo "  $name \\"
 | 
						|
        fi
 | 
						|
    done
 | 
						|
    rm -f $CTRLFILE
 | 
						|
    echo ""
 | 
						|
done
 | 
						|
 |