36
									
								
								archive/tar_freebsd.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								archive/tar_freebsd.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | // +build freebsd | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |    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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package archive | ||||||
|  |  | ||||||
|  | import "golang.org/x/sys/unix" | ||||||
|  |  | ||||||
|  | // mknod wraps unix.Mknod.  FreeBSD's unix.Mknod signature is different from | ||||||
|  | // other Unix and Unix-like operating systems. | ||||||
|  | func mknod(path string, mode uint32, dev uint64) error { | ||||||
|  | 	return unix.Mknod(path, mode, dev) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // lsetxattrCreate wraps unix.Lsetxattr with FreeBSD-specific flags and errors | ||||||
|  | func lsetxattrCreate(link string, attr string, data []byte) error { | ||||||
|  | 	err := unix.Lsetxattr(link, attr, data, 0) | ||||||
|  | 	if err == unix.ENOTSUP|| err == unix.EEXIST { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 	return err | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								archive/tar_mostunix.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								archive/tar_mostunix.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | // +build !windows,!freebsd | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |    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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package archive | ||||||
|  |  | ||||||
|  | import "golang.org/x/sys/unix" | ||||||
|  |  | ||||||
|  | // mknod wraps Unix.Mknod and casts dev to int | ||||||
|  | func mknod(path string, mode uint32, dev uint64) error { | ||||||
|  | 	return unix.Mknod(path, mode, int(dev)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // lsetxattrCreate wraps unix.Lsetxattr, passes the unix.XATTR_CREATE flag on | ||||||
|  | // supported operating systems,and ignores appropriate errors | ||||||
|  | func lsetxattrCreate(link string, attr string, data []byte) error { | ||||||
|  | 	err := unix.Lsetxattr(link, attr, data, unix.XATTR_CREATE) | ||||||
|  | 	if err == unix.ENOTSUP || err == unix.ENODATA || err == unix.EEXIST { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 	return err | ||||||
|  | } | ||||||
| @@ -108,7 +108,7 @@ func handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error { | |||||||
| 		mode |= unix.S_IFIFO | 		mode |= unix.S_IFIFO | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return unix.Mknod(path, mode, int(unix.Mkdev(uint32(hdr.Devmajor), uint32(hdr.Devminor)))) | 	return mknod(path, mode, unix.Mkdev(uint32(hdr.Devmajor), uint32(hdr.Devminor))) | ||||||
| } | } | ||||||
|  |  | ||||||
| func handleLChmod(hdr *tar.Header, path string, hdrInfo os.FileInfo) error { | func handleLChmod(hdr *tar.Header, path string, hdrInfo os.FileInfo) error { | ||||||
| @@ -196,10 +196,7 @@ func copyUpXAttrs(dst, src string) error { | |||||||
| 			} | 			} | ||||||
| 			return errors.Wrapf(err, "failed to get xattr %q on %s", xattr, src) | 			return errors.Wrapf(err, "failed to get xattr %q on %s", xattr, src) | ||||||
| 		} | 		} | ||||||
| 		if err := unix.Lsetxattr(dst, xattr, data, unix.XATTR_CREATE); err != nil { | 		if err := lsetxattrCreate(dst, xattr, data); err != nil { | ||||||
| 			if err == unix.ENOTSUP || err == unix.ENODATA || err == unix.EEXIST { |  | ||||||
| 				continue |  | ||||||
| 			} |  | ||||||
| 			return errors.Wrapf(err, "failed to set xattr %q on %s", xattr, dst) | 			return errors.Wrapf(err, "failed to set xattr %q on %s", xattr, dst) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -22,7 +22,8 @@ import ( | |||||||
| 	"os" | 	"os" | ||||||
| 	"os/signal" | 	"os/signal" | ||||||
|  |  | ||||||
| 	"github.com/containerd/containerd/runtime/v1/shim" | 	"github.com/containerd/containerd/sys/reaper" | ||||||
|  |  | ||||||
| 	runc "github.com/containerd/go-runc" | 	runc "github.com/containerd/go-runc" | ||||||
| 	"github.com/containerd/ttrpc" | 	"github.com/containerd/ttrpc" | ||||||
| ) | ) | ||||||
| @@ -34,7 +35,7 @@ func setupSignals() (chan os.Signal, error) { | |||||||
| 	signal.Notify(signals) | 	signal.Notify(signals) | ||||||
| 	// make sure runc is setup to use the monitor | 	// make sure runc is setup to use the monitor | ||||||
| 	// for waiting on processes | 	// for waiting on processes | ||||||
| 	runc.Monitor = shim.Default | 	runc.Monitor = reaper.Default | ||||||
| 	return signals, nil | 	return signals, nil | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Samuel Karp
					Samuel Karp