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
 | |
| 
 |