 27d7c50384
			
		
	
	27d7c50384
	
	
	
		
			
			This moves all the release builds into a Dockerfile which is a bit cleaner for setting up our build environment. Non-linux/amd64 builds are cross-compiled. Currently onlinux linux/amd64, linux/arm64, and windows/amd64 are supported, but is easy to add more, provided their is a cross-compile toolchain available for it. Signed-off-by: Brian Goff <cpuguy83@gmail.com>
		
			
				
	
	
		
			98 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| #   Copyright The containerd Authors.
 | |
| 
 | |
| #   Licensed under the Apache License, Version 2.0 (the "License");
 | |
| #   you may not use this file except in compliance with the License.
 | |
| #   You may obtain a copy of the License at
 | |
| 
 | |
| #       http://www.apache.org/licenses/LICENSE-2.0
 | |
| 
 | |
| #   Unless required by applicable law or agreed to in writing, software
 | |
| #   distributed under the License is distributed on an "AS IS" BASIS,
 | |
| #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| #   See the License for the specific language governing permissions and
 | |
| #   limitations under the License.
 | |
| 
 | |
| set -eu -o pipefail
 | |
| 
 | |
| DESTDIR="${DESTDIR:-"C:\\Program Files\\containerd"}"
 | |
| WINCNI_BIN_DIR="${DESTDIR}/cni/bin"
 | |
| WINCNI_PKG=github.com/Microsoft/windows-container-networking
 | |
| WINCNI_VERSION=aa10a0b31e9f72937063436454def1760b858ee2
 | |
| 
 | |
| git clone "https://${WINCNI_PKG}.git" "${GOPATH}/src/${WINCNI_PKG}"
 | |
| cd "${GOPATH}/src/${WINCNI_PKG}"
 | |
| git checkout "${WINCNI_VERSION}"
 | |
| make all
 | |
| install -D -m 755 "out/nat.exe" "${WINCNI_BIN_DIR}/nat.exe"
 | |
| install -D -m 755 "out/sdnbridge.exe" "${WINCNI_BIN_DIR}/sdnbridge.exe"
 | |
| install -D -m 755 "out/sdnoverlay.exe" "${WINCNI_BIN_DIR}/sdnoverlay.exe"
 | |
| 
 | |
| CNI_CONFIG_DIR="${DESTDIR}/cni/conf"
 | |
| mkdir -p "${CNI_CONFIG_DIR}"
 | |
| 
 | |
| # split_ip splits ip into a 4-element array.
 | |
| split_ip() {
 | |
|   local -r varname="$1"
 | |
|   local -r ip="$2"
 | |
|   for i in {0..3}; do
 | |
|     eval "$varname"[$i]="$( echo "$ip" | cut -d '.' -f $((i + 1)) )"
 | |
|   done
 | |
| }
 | |
| 
 | |
| # subnet gets subnet for a gateway, e.g. 192.168.100.0/24.
 | |
| calculate_subnet() {
 | |
|   local -r gateway="$1"
 | |
|   local -r prefix_len="$2"
 | |
|   split_ip gateway_array "$gateway"
 | |
|   local len=$prefix_len
 | |
|   for i in {0..3}; do
 | |
|     if (( len >= 8 )); then
 | |
|       mask=255
 | |
|     elif (( len > 0 )); then
 | |
|       mask=$(( 256 - 2 ** ( 8 - len ) ))
 | |
|     else
 | |
|       mask=0
 | |
|     fi
 | |
|     (( len -= 8 ))
 | |
|     result_array[i]=$(( gateway_array[i] & mask ))
 | |
|   done
 | |
|   result="$(printf ".%s" "${result_array[@]}")"
 | |
|   result="${result:1}"
 | |
|   echo "$result/$((32 - prefix_len))"
 | |
| }
 | |
| 
 | |
| # nat already exists on the Windows VM, the subnet and gateway
 | |
| # we specify should match that.
 | |
| : ${GATEWAY:="$(powershell -c "(Get-NetIPAddress -InterfaceAlias 'vEthernet (nat)' -AddressFamily IPv4).IPAddress")"}
 | |
| : ${PREFIX_LEN:="$(powershell -c "(Get-NetIPAddress -InterfaceAlias 'vEthernet (nat)' -AddressFamily IPv4).PrefixLength")"}
 | |
| 
 | |
| subnet="$(calculate_subnet "$GATEWAY" "$PREFIX_LEN")"
 | |
| 
 | |
| # The "name" field in the config is used as the underlying
 | |
| # network type right now (see
 | |
| # https://github.com/microsoft/windows-container-networking/pull/45),
 | |
| # so it must match a network type in:
 | |
| # https://docs.microsoft.com/en-us/windows-server/networking/technologies/hcn/hcn-json-document-schemas
 | |
| bash -c 'cat >"'"${CNI_CONFIG_DIR}"'"/0-containerd-nat.conf <<EOF
 | |
| {
 | |
|     "cniVersion": "0.2.0",
 | |
|     "name": "nat",
 | |
|     "type": "nat",
 | |
|     "master": "Ethernet",
 | |
|     "ipam": {
 | |
|         "subnet": "'$subnet'",
 | |
|         "routes": [
 | |
|             {
 | |
|                 "GW": "'$GATEWAY'"
 | |
|             }
 | |
|         ]
 | |
|     },
 | |
|     "capabilities": {
 | |
|         "portMappings": true,
 | |
|         "dns": true
 | |
|     }
 | |
| }
 | |
| EOF'
 |