HOME
BLOG
k8s_loong64
10月 26 2022

版本

k8s: 1.20.11
golang: go1.19 loong64

不支持的架构

!!! [0509 06:19:40] Unsupported host arch. Must be x86_64, 386, arm, arm64, s390x or ppc64le.
!!! [0509 06:19:45] Unsupported host arch. Must be x86_64, 386, arm, arm64, s390x or ppc64le.

修改hack/lib/golang.sh文件

  • KUBE_SUPPORTED_SERVER_PLATFORMS
  • KUBE_SUPPORTED_NODE_PLATFORMS
  • KUBE_SUPPORTED_CLIENT_PLATFORMS
  • KUBE_SUPPORTED_TEST_PLATFORMS
    添加上linux/loong64

修改hack/lib/util.sh
在kube::util::host_arch() 里添加

loongarch64*)
  host_arch=loongarch64
  ;;

修改hack/local-up-cluster.sh文件

loongarch64*)
  host_arch=loongarch64
  ;;

修改code-generator

+++ [0509 06:58:10] Building go targets for linux/loong64:
    ./vendor/k8s.io/code-generator/cmd/prerelease-lifecycle-gen
find: 'rsync': No such file or directory
find: 'rsync': No such file or directory
Generating prerelease lifecycle code for 27 targets

修改ginko

报错内容

# k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/remote
vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_unix.go:42:2: undefined: syscallDup
vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_unix.go:43:2: undefined: syscallDup

修改vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go

// +build !linux !arm64
// +build !linux !riscv64
// +build !linux !loong64
// +build !windows
// +build !solaris

拷贝 vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_arm64.gosyscall_dup_linux_loong64.go并修改

// +build linux,loong64

替换sys/unix

报错内容

# k8s.io/kubernetes/vendor/golang.org/x/sys/unix
vendor/golang.org/x/sys/unix/affinity_linux.go:14:35: undefined: _NCPUBITS
vendor/golang.org/x/sys/unix/affinity_linux.go:17:25: undefined: cpuMask
vendor/golang.org/x/sys/unix/affinity_linux.go:50:27: undefined: cpuMask
vendor/golang.org/x/sys/unix/sockcmsg_unix.go:33:9: undefined: Cmsghdr
vendor/golang.org/x/sys/unix/ztypes_linux.go:22:11: undefined: Timespec
vendor/golang.org/x/sys/unix/ztypes_linux.go:23:11: undefined: Timespec
vendor/golang.org/x/sys/unix/ztypes_linux.go:1112:12: undefined: SockaddrStorage
vendor/golang.org/x/sys/unix/ztypes_linux.go:2284:8: undefined: Timespec
vendor/golang.org/x/sys/unix/ztypes_linux.go:2748:8: undefined: TIPCSubscr
vendor/golang.org/x/sys/unix/ztypes_linux.go:2968:10: undefined: PPSKInfo
vendor/golang.org/x/sys/unix/affinity_linux.go:50:27: too many errors
go install golang.org/x/sys@latest
cp -r ${GOPATH}/pkg/mod/golang.org/x/sys@{latest}/unix vendor/golang.org/x/sys/

替换net/internal/socket net/ipv4 net/ipv6

报错内容

# k8s.io/kubernetes/vendor/golang.org/x/net/internal/socket
vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go:11:17: undefined: mmsghdr
vendor/golang.org/x/net/internal/socket/cmsghdr.go:9:10: undefined: cmsghdr
vendor/golang.org/x/net/internal/socket/cmsghdr.go:10:10: undefined: cmsghdr
vendor/golang.org/x/net/internal/socket/cmsghdr.go:11:10: undefined: cmsghdr
vendor/golang.org/x/net/internal/socket/msghdr_linux.go:9:10: undefined: msghdr
vendor/golang.org/x/net/internal/socket/msghdr_linux.go:9:28: undefined: iovec
vendor/golang.org/x/net/internal/socket/msghdr_linux.go:23:10: undefined: msghdr
vendor/golang.org/x/net/internal/socket/msghdr_linux.go:30:10: undefined: msghdr
vendor/golang.org/x/net/internal/socket/msghdr_linux.go:34:10: undefined: msghdr
vendor/golang.org/x/net/internal/socket/sys_linux.go:14:31: undefined: mmsghdr
vendor/golang.org/x/net/internal/socket/sys_linux.go:14:31: too many errors

# k8s.io/kubernetes/vendor/golang.org/x/net/ipv4
vendor/golang.org/x/net/ipv4/icmp.go:34:2: undefined: icmpFilter
vendor/golang.org/x/net/ipv4/icmp_linux.go:7:10: undefined: icmpFilter
vendor/golang.org/x/net/ipv4/icmp_linux.go:11:10: undefined: icmpFilter
vendor/golang.org/x/net/ipv4/icmp_linux.go:15:10: undefined: icmpFilter
vendor/golang.org/x/net/ipv4/icmp_linux.go:23:10: undefined: icmpFilter
vendor/golang.org/x/net/ipv4/sys_linux.go:19:19: undefined: sysIP_TTL
vendor/golang.org/x/net/ipv4/sys_linux.go:20:19: undefined: sysIP_PKTINFO
vendor/golang.org/x/net/ipv4/sys_linux.go:20:34: undefined: sizeofInetPktinfo
vendor/golang.org/x/net/ipv4/sys_linux.go:24:79: undefined: sysIP_TOS
vendor/golang.org/x/net/ipv4/sys_linux.go:25:79: undefined: sysIP_TTL
vendor/golang.org/x/net/ipv4/sys_linux.go:25:79: too many errors

# k8s.io/kubernetes/vendor/golang.org/x/net/ipv6
vendor/golang.org/x/net/ipv6/icmp.go:37:2: undefined: icmpv6Filter
vendor/golang.org/x/net/ipv6/icmp_linux.go:7:10: undefined: icmpv6Filter
vendor/golang.org/x/net/ipv6/icmp_linux.go:11:10: undefined: icmpv6Filter
vendor/golang.org/x/net/ipv6/icmp_linux.go:15:10: undefined: icmpv6Filter
vendor/golang.org/x/net/ipv6/icmp_linux.go:25:10: undefined: icmpv6Filter
vendor/golang.org/x/net/ipv6/sys_linux.go:19:21: undefined: sysIPV6_TCLASS
vendor/golang.org/x/net/ipv6/sys_linux.go:20:21: undefined: sysIPV6_HOPLIMIT
vendor/golang.org/x/net/ipv6/sys_linux.go:21:21: undefined: sysIPV6_PKTINFO
vendor/golang.org/x/net/ipv6/sys_linux.go:21:38: undefined: sizeofInet6Pktinfo
vendor/golang.org/x/net/ipv6/sys_linux.go:22:21: undefined: sysIPV6_PATHMTU
vendor/golang.org/x/net/ipv6/sys_linux.go:22:21: too many errors
go install golang.org/x/net@latest
cp -r ${GOPATH}/pkg/mod/golang.org/x/net@{latest}/internal/socket vendor/golang.org/x/net/internal
cp -r ${GOPATH}/pkg/mod/golang.org/x/net@{latest}/ipv4 vendor/golang.org/x/net
cp -r ${GOPATH}/pkg/mod/golang.org/x/net@{latest}/ipv6 vendor/golang.org/x/net

修改etcd

报错内容

vendor/go.etcd.io/bbolt/db.go:127:13: undeclared name maxMapSize for array length
vendor/go.etcd.io/bbolt/db.go:400:12: undefined: maxMapSize
vendor/go.etcd.io/bbolt/db.go:418:10: undefined: maxMapSize
vendor/go.etcd.io/bbolt/db.go:419:8: undefined: maxMapSize
vendor/go.etcd.io/bbolt/db.go:885:2: pos declared but not used
vendor/go.etcd.io/bbolt/bolt_unix.go:66:15: undeclared name maxMapSize for array length
vendor/go.etcd.io/bbolt/tx.go:533:12: undefined: maxAllocSize
vendor/go.etcd.io/bbolt/tx.go:534:10: undefined: maxAllocSize
vendor/go.etcd.io/bbolt/unsafe.go:27:12: undeclared name maxAllocSize for array length

拷贝 vendor/go.etcd.io/bbolt/bolt_arm64.govendor/go.etcd.io/bbolt/bolt_loong64.go 并修改

// +build loong64

编译

KUBE_BUILD_PLATFORMS=linux/loong64 make all