Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
c2e561f2
Unverified
Commit
c2e561f2
authored
May 20, 2021
by
Erik Wilson
Committed by
GitHub
May 20, 2021
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3358 from dweomer/fix/3296/caps
containerd: v1.4.4-k3s2
parents
99c7d512
cb25835d
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
696 additions
and
237 deletions
+696
-237
go.mod
go.mod
+2
-2
go.sum
go.sum
+4
-4
go.mod
vendor/github.com/containerd/containerd/go.mod
+2
-2
go.sum
vendor/github.com/containerd/containerd/go.sum
+2
-2
spec_opts.go
vendor/github.com/containerd/containerd/oci/spec_opts.go
+53
-60
spec_opts_linux.go
...r/github.com/containerd/containerd/oci/spec_opts_linux.go
+42
-79
spec_opts_nonlinux.go
...ithub.com/containerd/containerd/oci/spec_opts_nonlinux.go
+38
-0
spec_opts_unix.go
...or/github.com/containerd/containerd/oci/spec_opts_unix.go
+10
-79
spec_opts_windows.go
...github.com/containerd/containerd/oci/spec_opts_windows.go
+1
-1
utils_unix.go
vendor/github.com/containerd/containerd/oci/utils_unix.go
+137
-0
cap_linux.go
vendor/github.com/containerd/containerd/pkg/cap/cap_linux.go
+192
-0
cap_linux.go
vendor/github.com/containerd/cri/pkg/cap/cap_linux.go
+192
-0
spec_unix.go
...ithub.com/containerd/cri/pkg/containerd/opts/spec_unix.go
+2
-2
container_create_unix.go
...ub.com/containerd/cri/pkg/server/container_create_unix.go
+2
-2
service.go
vendor/github.com/containerd/cri/pkg/server/service.go
+3
-0
service_unix.go
vendor/github.com/containerd/cri/pkg/server/service_unix.go
+8
-0
modules.txt
vendor/modules.txt
+6
-4
No files found.
go.mod
View file @
c2e561f2
...
@@ -8,9 +8,9 @@ replace (
...
@@ -8,9 +8,9 @@ replace (
github.com/containerd/btrfs => github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e
github.com/containerd/btrfs => github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e
github.com/containerd/cgroups => github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340
github.com/containerd/cgroups => github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340
github.com/containerd/console => github.com/containerd/console v1.0.0
github.com/containerd/console => github.com/containerd/console v1.0.0
github.com/containerd/containerd => github.com/k3s-io/containerd v1.4.4-k3s
1
github.com/containerd/containerd => github.com/k3s-io/containerd v1.4.4-k3s
2 // k3s-release/1.4
github.com/containerd/continuity => github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1
github.com/containerd/continuity => github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1
github.com/containerd/cri => github.com/k3s-io/cri v1.4.0-k3s.
5
// k3s-release/1.4
github.com/containerd/cri => github.com/k3s-io/cri v1.4.0-k3s.
6
// k3s-release/1.4
github.com/containerd/fifo => github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b
github.com/containerd/fifo => github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b
github.com/containerd/go-runc => github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328
github.com/containerd/go-runc => github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328
github.com/containerd/ttrpc => github.com/containerd/ttrpc v1.0.1
github.com/containerd/ttrpc => github.com/containerd/ttrpc v1.0.1
...
...
go.sum
View file @
c2e561f2
...
@@ -530,12 +530,12 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7
...
@@ -530,12 +530,12 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/k3s-io/containerd v1.4.4-k3s
1 h1:9D9ynaNMW0vT/Kycr7qLstBGby6T84iJpbKFXKGhAPk
=
github.com/k3s-io/containerd v1.4.4-k3s
2 h1:Jgpa+oLISVQuib3YEM9lNCG/rmJwhVW95PNVuxsUZdM
=
github.com/k3s-io/containerd v1.4.4-k3s
1/go.mod h1:M0uyTU3ZQ0WEBn5YcYPDs/7LpW/0mqjt5im7Wn2z1kc
=
github.com/k3s-io/containerd v1.4.4-k3s
2/go.mod h1:0fNz8l5ogmvtVmaK9rW4mUxz6doAlDqFv/CrxGUSiyo
=
github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1 h1:KEz2rd9IDbrQT8w6RibEYlwfTXiu0P6hQDE+6O4IJdI=
github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1 h1:KEz2rd9IDbrQT8w6RibEYlwfTXiu0P6hQDE+6O4IJdI=
github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ=
github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ=
github.com/k3s-io/cri v1.4.0-k3s.
5 h1:Uh7QkRKibPJqSBbtCtgpjYsdNVcx3Tx+7HHlhxKBtu8
=
github.com/k3s-io/cri v1.4.0-k3s.
6 h1:Hn/0KRtv62B/KNT8oULl1hWnViyuJ+RB0x9y9zZsmCw
=
github.com/k3s-io/cri v1.4.0-k3s.
5
/go.mod h1:fGPUUHMKQik/vIegSe05DtX/m4miovdtvVLqRUFAkK0=
github.com/k3s-io/cri v1.4.0-k3s.
6
/go.mod h1:fGPUUHMKQik/vIegSe05DtX/m4miovdtvVLqRUFAkK0=
github.com/k3s-io/cri-tools v1.21.0-k3s1 h1:MWQtAsx4HCNXenqU/B4V9eU6HMyafkd1PnW6d4HCfos=
github.com/k3s-io/cri-tools v1.21.0-k3s1 h1:MWQtAsx4HCNXenqU/B4V9eU6HMyafkd1PnW6d4HCfos=
github.com/k3s-io/cri-tools v1.21.0-k3s1/go.mod h1:Qsz54zxINPR+WVWX9Kc3CTmuDFB1dNLCNV8jE8lUbtU=
github.com/k3s-io/cri-tools v1.21.0-k3s1/go.mod h1:Qsz54zxINPR+WVWX9Kc3CTmuDFB1dNLCNV8jE8lUbtU=
github.com/k3s-io/etcd v0.5.0-alpha.5.0.20201208200253-50621aee4aea h1:7cwby0GoNAi8IsVrT0q+JfQpB6V76ZaEGhj6qts/mvU=
github.com/k3s-io/etcd v0.5.0-alpha.5.0.20201208200253-50621aee4aea h1:7cwby0GoNAi8IsVrT0q+JfQpB6V76ZaEGhj6qts/mvU=
...
...
vendor/github.com/containerd/containerd/go.mod
View file @
c2e561f2
...
@@ -4,7 +4,7 @@ go 1.14
...
@@ -4,7 +4,7 @@ go 1.14
replace (
replace (
github.com/containerd/continuity => github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1
github.com/containerd/continuity => github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1
github.com/containerd/cri => github.com/k3s-io/cri v1.4.0-k3s.
5
// k3s-release/1.4
github.com/containerd/cri => github.com/k3s-io/cri v1.4.0-k3s.
6
// k3s-release/1.4
github.com/golang/protobuf => github.com/golang/protobuf v1.3.5
github.com/golang/protobuf => github.com/golang/protobuf v1.3.5
google.golang.org/genproto => google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63
google.golang.org/genproto => google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63
k8s.io/api => k8s.io/api v0.19.5
k8s.io/api => k8s.io/api v0.19.5
...
@@ -73,7 +73,7 @@ require (
...
@@ -73,7 +73,7 @@ require (
github.com/pkg/errors v0.9.1
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.7.1
github.com/prometheus/client_golang v1.7.1
github.com/sirupsen/logrus v1.7.0
github.com/sirupsen/logrus v1.7.0
github.com/s
yndtr/gocapability v0.0.0-20180916011248-d98352740cb2
github.com/s
tretchr/testify v1.4.0
github.com/tchap/go-patricia v2.2.6+incompatible // indirect
github.com/tchap/go-patricia v2.2.6+incompatible // indirect
github.com/urfave/cli v1.22.2
github.com/urfave/cli v1.22.2
go.etcd.io/bbolt v1.3.5
go.etcd.io/bbolt v1.3.5
...
...
vendor/github.com/containerd/containerd/go.sum
View file @
c2e561f2
...
@@ -402,8 +402,8 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
...
@@ -402,8 +402,8 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1 h1:KEz2rd9IDbrQT8w6RibEYlwfTXiu0P6hQDE+6O4IJdI=
github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1 h1:KEz2rd9IDbrQT8w6RibEYlwfTXiu0P6hQDE+6O4IJdI=
github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ=
github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ=
github.com/k3s-io/cri v1.4.0-k3s.
5 h1:Uh7QkRKibPJqSBbtCtgpjYsdNVcx3Tx+7HHlhxKBtu8
=
github.com/k3s-io/cri v1.4.0-k3s.
6 h1:Hn/0KRtv62B/KNT8oULl1hWnViyuJ+RB0x9y9zZsmCw
=
github.com/k3s-io/cri v1.4.0-k3s.
5
/go.mod h1:fGPUUHMKQik/vIegSe05DtX/m4miovdtvVLqRUFAkK0=
github.com/k3s-io/cri v1.4.0-k3s.
6
/go.mod h1:fGPUUHMKQik/vIegSe05DtX/m4miovdtvVLqRUFAkK0=
github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34=
github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
...
...
vendor/github.com/containerd/containerd/oci/spec_opts.go
View file @
c2e561f2
...
@@ -38,7 +38,6 @@ import (
...
@@ -38,7 +38,6 @@ import (
"github.com/opencontainers/runc/libcontainer/user"
"github.com/opencontainers/runc/libcontainer/user"
specs
"github.com/opencontainers/runtime-spec/specs-go"
specs
"github.com/opencontainers/runtime-spec/specs-go"
"github.com/pkg/errors"
"github.com/pkg/errors"
"github.com/syndtr/gocapability/capability"
)
)
// SpecOpts sets spec specific information to a newly generated OCI spec
// SpecOpts sets spec specific information to a newly generated OCI spec
...
@@ -274,6 +273,28 @@ func WithMounts(mounts []specs.Mount) SpecOpts {
...
@@ -274,6 +273,28 @@ func WithMounts(mounts []specs.Mount) SpecOpts {
}
}
}
}
// WithoutMounts removes mounts
func
WithoutMounts
(
dests
...
string
)
SpecOpts
{
return
func
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
var
(
mounts
[]
specs
.
Mount
current
=
s
.
Mounts
)
mLoop
:
for
_
,
m
:=
range
current
{
mDestination
:=
filepath
.
Clean
(
m
.
Destination
)
for
_
,
dest
:=
range
dests
{
if
mDestination
==
dest
{
continue
mLoop
}
}
mounts
=
append
(
mounts
,
m
)
}
s
.
Mounts
=
mounts
return
nil
}
}
// WithHostNamespace allows a task to run inside the host's linux namespace
// WithHostNamespace allows a task to run inside the host's linux namespace
func
WithHostNamespace
(
ns
specs
.
LinuxNamespaceType
)
SpecOpts
{
func
WithHostNamespace
(
ns
specs
.
LinuxNamespaceType
)
SpecOpts
{
return
func
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
return
func
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
...
@@ -295,10 +316,7 @@ func WithLinuxNamespace(ns specs.LinuxNamespace) SpecOpts {
...
@@ -295,10 +316,7 @@ func WithLinuxNamespace(ns specs.LinuxNamespace) SpecOpts {
setLinux
(
s
)
setLinux
(
s
)
for
i
,
n
:=
range
s
.
Linux
.
Namespaces
{
for
i
,
n
:=
range
s
.
Linux
.
Namespaces
{
if
n
.
Type
==
ns
.
Type
{
if
n
.
Type
==
ns
.
Type
{
before
:=
s
.
Linux
.
Namespaces
[
:
i
]
s
.
Linux
.
Namespaces
[
i
]
=
ns
after
:=
s
.
Linux
.
Namespaces
[
i
+
1
:
]
s
.
Linux
.
Namespaces
=
append
(
before
,
ns
)
s
.
Linux
.
Namespaces
=
append
(
s
.
Linux
.
Namespaces
,
after
...
)
return
nil
return
nil
}
}
}
}
...
@@ -536,7 +554,7 @@ func WithUser(userstr string) SpecOpts {
...
@@ -536,7 +554,7 @@ func WithUser(userstr string) SpecOpts {
}
}
f
:=
func
(
root
string
)
error
{
f
:=
func
(
root
string
)
error
{
if
username
!=
""
{
if
username
!=
""
{
user
,
err
:=
get
UserFromPath
(
root
,
func
(
u
user
.
User
)
bool
{
user
,
err
:=
UserFromPath
(
root
,
func
(
u
user
.
User
)
bool
{
return
u
.
Name
==
username
return
u
.
Name
==
username
})
})
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -545,7 +563,7 @@ func WithUser(userstr string) SpecOpts {
...
@@ -545,7 +563,7 @@ func WithUser(userstr string) SpecOpts {
uid
=
uint32
(
user
.
Uid
)
uid
=
uint32
(
user
.
Uid
)
}
}
if
groupname
!=
""
{
if
groupname
!=
""
{
gid
,
err
=
get
GIDFromPath
(
root
,
func
(
g
user
.
Group
)
bool
{
gid
,
err
=
GIDFromPath
(
root
,
func
(
g
user
.
Group
)
bool
{
return
g
.
Name
==
groupname
return
g
.
Name
==
groupname
})
})
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -600,11 +618,11 @@ func WithUserID(uid uint32) SpecOpts {
...
@@ -600,11 +618,11 @@ func WithUserID(uid uint32) SpecOpts {
if
!
isRootfsAbs
(
s
.
Root
.
Path
)
{
if
!
isRootfsAbs
(
s
.
Root
.
Path
)
{
return
errors
.
Errorf
(
"rootfs absolute path is required"
)
return
errors
.
Errorf
(
"rootfs absolute path is required"
)
}
}
user
,
err
:=
get
UserFromPath
(
s
.
Root
.
Path
,
func
(
u
user
.
User
)
bool
{
user
,
err
:=
UserFromPath
(
s
.
Root
.
Path
,
func
(
u
user
.
User
)
bool
{
return
u
.
Uid
==
int
(
uid
)
return
u
.
Uid
==
int
(
uid
)
})
})
if
err
!=
nil
{
if
err
!=
nil
{
if
os
.
IsNotExist
(
err
)
||
err
==
e
rrNoUsersFound
{
if
os
.
IsNotExist
(
err
)
||
err
==
E
rrNoUsersFound
{
s
.
Process
.
User
.
UID
,
s
.
Process
.
User
.
GID
=
uid
,
0
s
.
Process
.
User
.
UID
,
s
.
Process
.
User
.
GID
=
uid
,
0
return
nil
return
nil
}
}
...
@@ -626,11 +644,11 @@ func WithUserID(uid uint32) SpecOpts {
...
@@ -626,11 +644,11 @@ func WithUserID(uid uint32) SpecOpts {
return
err
return
err
}
}
return
mount
.
WithTempMount
(
ctx
,
mounts
,
func
(
root
string
)
error
{
return
mount
.
WithTempMount
(
ctx
,
mounts
,
func
(
root
string
)
error
{
user
,
err
:=
get
UserFromPath
(
root
,
func
(
u
user
.
User
)
bool
{
user
,
err
:=
UserFromPath
(
root
,
func
(
u
user
.
User
)
bool
{
return
u
.
Uid
==
int
(
uid
)
return
u
.
Uid
==
int
(
uid
)
})
})
if
err
!=
nil
{
if
err
!=
nil
{
if
os
.
IsNotExist
(
err
)
||
err
==
e
rrNoUsersFound
{
if
os
.
IsNotExist
(
err
)
||
err
==
E
rrNoUsersFound
{
s
.
Process
.
User
.
UID
,
s
.
Process
.
User
.
GID
=
uid
,
0
s
.
Process
.
User
.
UID
,
s
.
Process
.
User
.
GID
=
uid
,
0
return
nil
return
nil
}
}
...
@@ -654,7 +672,7 @@ func WithUsername(username string) SpecOpts {
...
@@ -654,7 +672,7 @@ func WithUsername(username string) SpecOpts {
if
!
isRootfsAbs
(
s
.
Root
.
Path
)
{
if
!
isRootfsAbs
(
s
.
Root
.
Path
)
{
return
errors
.
Errorf
(
"rootfs absolute path is required"
)
return
errors
.
Errorf
(
"rootfs absolute path is required"
)
}
}
user
,
err
:=
get
UserFromPath
(
s
.
Root
.
Path
,
func
(
u
user
.
User
)
bool
{
user
,
err
:=
UserFromPath
(
s
.
Root
.
Path
,
func
(
u
user
.
User
)
bool
{
return
u
.
Name
==
username
return
u
.
Name
==
username
})
})
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -675,7 +693,7 @@ func WithUsername(username string) SpecOpts {
...
@@ -675,7 +693,7 @@ func WithUsername(username string) SpecOpts {
return
err
return
err
}
}
return
mount
.
WithTempMount
(
ctx
,
mounts
,
func
(
root
string
)
error
{
return
mount
.
WithTempMount
(
ctx
,
mounts
,
func
(
root
string
)
error
{
user
,
err
:=
get
UserFromPath
(
root
,
func
(
u
user
.
User
)
bool
{
user
,
err
:=
UserFromPath
(
root
,
func
(
u
user
.
User
)
bool
{
return
u
.
Name
==
username
return
u
.
Name
==
username
})
})
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -707,11 +725,11 @@ func WithAdditionalGIDs(userstr string) SpecOpts {
...
@@ -707,11 +725,11 @@ func WithAdditionalGIDs(userstr string) SpecOpts {
var
username
string
var
username
string
uid
,
err
:=
strconv
.
Atoi
(
userstr
)
uid
,
err
:=
strconv
.
Atoi
(
userstr
)
if
err
==
nil
{
if
err
==
nil
{
user
,
err
:=
get
UserFromPath
(
root
,
func
(
u
user
.
User
)
bool
{
user
,
err
:=
UserFromPath
(
root
,
func
(
u
user
.
User
)
bool
{
return
u
.
Uid
==
uid
return
u
.
Uid
==
uid
})
})
if
err
!=
nil
{
if
err
!=
nil
{
if
os
.
IsNotExist
(
err
)
||
err
==
e
rrNoUsersFound
{
if
os
.
IsNotExist
(
err
)
||
err
==
E
rrNoUsersFound
{
return
nil
return
nil
}
}
return
err
return
err
...
@@ -776,29 +794,6 @@ func WithCapabilities(caps []string) SpecOpts {
...
@@ -776,29 +794,6 @@ func WithCapabilities(caps []string) SpecOpts {
}
}
}
}
// WithAllCapabilities sets all linux capabilities for the process
var
WithAllCapabilities
=
func
(
ctx
context
.
Context
,
client
Client
,
c
*
containers
.
Container
,
s
*
Spec
)
error
{
return
WithCapabilities
(
GetAllCapabilities
())(
ctx
,
client
,
c
,
s
)
}
// GetAllCapabilities returns all caps up to CAP_LAST_CAP
// or CAP_BLOCK_SUSPEND on RHEL6
func
GetAllCapabilities
()
[]
string
{
last
:=
capability
.
CAP_LAST_CAP
// hack for RHEL6 which has no /proc/sys/kernel/cap_last_cap
if
last
==
capability
.
Cap
(
63
)
{
last
=
capability
.
CAP_BLOCK_SUSPEND
}
var
caps
[]
string
for
_
,
cap
:=
range
capability
.
List
()
{
if
cap
>
last
{
continue
}
caps
=
append
(
caps
,
"CAP_"
+
strings
.
ToUpper
(
cap
.
String
()))
}
return
caps
}
func
capsContain
(
caps
[]
string
,
s
string
)
bool
{
func
capsContain
(
caps
[]
string
,
s
string
)
bool
{
for
_
,
c
:=
range
caps
{
for
_
,
c
:=
range
caps
{
if
c
==
s
{
if
c
==
s
{
...
@@ -869,9 +864,12 @@ func WithAmbientCapabilities(caps []string) SpecOpts {
...
@@ -869,9 +864,12 @@ func WithAmbientCapabilities(caps []string) SpecOpts {
}
}
}
}
var
errNoUsersFound
=
errors
.
New
(
"no users found"
)
// ErrNoUsersFound can be returned from UserFromPath
var
ErrNoUsersFound
=
errors
.
New
(
"no users found"
)
func
getUserFromPath
(
root
string
,
filter
func
(
user
.
User
)
bool
)
(
user
.
User
,
error
)
{
// UserFromPath inspects the user object using /etc/passwd in the specified rootfs.
// filter can be nil.
func
UserFromPath
(
root
string
,
filter
func
(
user
.
User
)
bool
)
(
user
.
User
,
error
)
{
ppath
,
err
:=
fs
.
RootPath
(
root
,
"/etc/passwd"
)
ppath
,
err
:=
fs
.
RootPath
(
root
,
"/etc/passwd"
)
if
err
!=
nil
{
if
err
!=
nil
{
return
user
.
User
{},
err
return
user
.
User
{},
err
...
@@ -881,14 +879,17 @@ func getUserFromPath(root string, filter func(user.User) bool) (user.User, error
...
@@ -881,14 +879,17 @@ func getUserFromPath(root string, filter func(user.User) bool) (user.User, error
return
user
.
User
{},
err
return
user
.
User
{},
err
}
}
if
len
(
users
)
==
0
{
if
len
(
users
)
==
0
{
return
user
.
User
{},
e
rrNoUsersFound
return
user
.
User
{},
E
rrNoUsersFound
}
}
return
users
[
0
],
nil
return
users
[
0
],
nil
}
}
var
errNoGroupsFound
=
errors
.
New
(
"no groups found"
)
// ErrNoGroupsFound can be returned from GIDFromPath
var
ErrNoGroupsFound
=
errors
.
New
(
"no groups found"
)
func
getGIDFromPath
(
root
string
,
filter
func
(
user
.
Group
)
bool
)
(
gid
uint32
,
err
error
)
{
// GIDFromPath inspects the GID using /etc/passwd in the specified rootfs.
// filter can be nil.
func
GIDFromPath
(
root
string
,
filter
func
(
user
.
Group
)
bool
)
(
gid
uint32
,
err
error
)
{
gpath
,
err
:=
fs
.
RootPath
(
root
,
"/etc/group"
)
gpath
,
err
:=
fs
.
RootPath
(
root
,
"/etc/group"
)
if
err
!=
nil
{
if
err
!=
nil
{
return
0
,
err
return
0
,
err
...
@@ -898,7 +899,7 @@ func getGIDFromPath(root string, filter func(user.Group) bool) (gid uint32, err
...
@@ -898,7 +899,7 @@ func getGIDFromPath(root string, filter func(user.Group) bool) (gid uint32, err
return
0
,
err
return
0
,
err
}
}
if
len
(
groups
)
==
0
{
if
len
(
groups
)
==
0
{
return
0
,
e
rrNoGroupsFound
return
0
,
E
rrNoGroupsFound
}
}
g
:=
groups
[
0
]
g
:=
groups
[
0
]
return
uint32
(
g
.
Gid
),
nil
return
uint32
(
g
.
Gid
),
nil
...
@@ -948,16 +949,13 @@ func WithReadonlyPaths(paths []string) SpecOpts {
...
@@ -948,16 +949,13 @@ func WithReadonlyPaths(paths []string) SpecOpts {
// WithWriteableSysfs makes any sysfs mounts writeable
// WithWriteableSysfs makes any sysfs mounts writeable
func
WithWriteableSysfs
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
func
WithWriteableSysfs
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
for
i
,
m
:=
range
s
.
Mounts
{
for
_
,
m
:=
range
s
.
Mounts
{
if
m
.
Type
==
"sysfs"
{
if
m
.
Type
==
"sysfs"
{
var
options
[]
string
for
i
,
o
:=
range
m
.
Options
{
for
_
,
o
:=
range
m
.
Options
{
if
o
==
"ro"
{
if
o
==
"ro"
{
o
=
"rw"
m
.
Options
[
i
]
=
"rw"
}
}
options
=
append
(
options
,
o
)
}
}
s
.
Mounts
[
i
]
.
Options
=
options
}
}
}
}
return
nil
return
nil
...
@@ -965,16 +963,13 @@ func WithWriteableSysfs(_ context.Context, _ Client, _ *containers.Container, s
...
@@ -965,16 +963,13 @@ func WithWriteableSysfs(_ context.Context, _ Client, _ *containers.Container, s
// WithWriteableCgroupfs makes any cgroup mounts writeable
// WithWriteableCgroupfs makes any cgroup mounts writeable
func
WithWriteableCgroupfs
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
func
WithWriteableCgroupfs
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
for
i
,
m
:=
range
s
.
Mounts
{
for
_
,
m
:=
range
s
.
Mounts
{
if
m
.
Type
==
"cgroup"
{
if
m
.
Type
==
"cgroup"
{
var
options
[]
string
for
i
,
o
:=
range
m
.
Options
{
for
_
,
o
:=
range
m
.
Options
{
if
o
==
"ro"
{
if
o
==
"ro"
{
o
=
"rw"
m
.
Options
[
i
]
=
"rw"
}
}
options
=
append
(
options
,
o
)
}
}
s
.
Mounts
[
i
]
.
Options
=
options
}
}
}
}
return
nil
return
nil
...
@@ -1126,7 +1121,7 @@ func WithDefaultUnixDevices(_ context.Context, _ Client, _ *containers.Container
...
@@ -1126,7 +1121,7 @@ func WithDefaultUnixDevices(_ context.Context, _ Client, _ *containers.Container
// WithPrivileged sets up options for a privileged container
// WithPrivileged sets up options for a privileged container
var
WithPrivileged
=
Compose
(
var
WithPrivileged
=
Compose
(
WithAllCapabilities
,
WithAllC
urrentC
apabilities
,
WithMaskedPaths
(
nil
),
WithMaskedPaths
(
nil
),
WithReadonlyPaths
(
nil
),
WithReadonlyPaths
(
nil
),
WithWriteableSysfs
,
WithWriteableSysfs
,
...
@@ -1199,15 +1194,13 @@ func WithLinuxDevices(devices []specs.LinuxDevice) SpecOpts {
...
@@ -1199,15 +1194,13 @@ func WithLinuxDevices(devices []specs.LinuxDevice) SpecOpts {
}
}
}
}
var
ErrNotADevice
=
errors
.
New
(
"not a device node"
)
// WithLinuxDevice adds the device specified by path to the spec
// WithLinuxDevice adds the device specified by path to the spec
func
WithLinuxDevice
(
path
,
permissions
string
)
SpecOpts
{
func
WithLinuxDevice
(
path
,
permissions
string
)
SpecOpts
{
return
func
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
return
func
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
setLinux
(
s
)
setLinux
(
s
)
setResources
(
s
)
setResources
(
s
)
dev
,
err
:=
deviceFromPath
(
path
,
permissions
)
dev
,
err
:=
deviceFromPath
(
path
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
...
vendor/github.com/containerd/containerd/oci/spec_opts_linux.go
View file @
c2e561f2
...
@@ -20,20 +20,17 @@ package oci
...
@@ -20,20 +20,17 @@ package oci
import
(
import
(
"context"
"context"
"io/ioutil"
"os"
"path/filepath"
"github.com/containerd/containerd/containers"
"github.com/containerd/containerd/containers"
"github.com/containerd/containerd/pkg/cap"
specs
"github.com/opencontainers/runtime-spec/specs-go"
specs
"github.com/opencontainers/runtime-spec/specs-go"
"golang.org/x/sys/unix"
)
)
// WithHostDevices adds all the hosts device nodes to the container's spec
// WithHostDevices adds all the hosts device nodes to the container's spec
func
WithHostDevices
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
func
WithHostDevices
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
setLinux
(
s
)
setLinux
(
s
)
devs
,
err
:=
getDevices
(
"/dev"
)
devs
,
err
:=
HostDevices
(
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -41,83 +38,28 @@ func WithHostDevices(_ context.Context, _ Client, _ *containers.Container, s *Sp
...
@@ -41,83 +38,28 @@ func WithHostDevices(_ context.Context, _ Client, _ *containers.Container, s *Sp
return
nil
return
nil
}
}
func
getDevices
(
path
string
)
([]
specs
.
LinuxDevice
,
error
)
{
// WithDevices recursively adds devices from the passed in path and associated cgroup rules for that device.
files
,
err
:=
ioutil
.
ReadDir
(
path
)
// If devicePath is a dir it traverses the dir to add all devices in that dir.
if
err
!=
nil
{
// If devicePath is not a dir, it attempts to add the single device.
return
nil
,
err
// If containerPath is not set then the device path is used for the container path.
}
func
WithDevices
(
devicePath
,
containerPath
,
permissions
string
)
SpecOpts
{
var
out
[]
specs
.
LinuxDevice
return
func
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
for
_
,
f
:=
range
files
{
devs
,
err
:=
getDevices
(
devicePath
,
containerPath
)
switch
{
case
f
.
IsDir
()
:
switch
f
.
Name
()
{
// ".lxc" & ".lxd-mounts" added to address https://github.com/lxc/lxd/issues/2825
// ".udev" added to address https://github.com/opencontainers/runc/issues/2093
case
"pts"
,
"shm"
,
"fd"
,
"mqueue"
,
".lxc"
,
".lxd-mounts"
,
".udev"
:
continue
default
:
sub
,
err
:=
getDevices
(
filepath
.
Join
(
path
,
f
.
Name
()))
if
err
!=
nil
{
return
nil
,
err
}
out
=
append
(
out
,
sub
...
)
continue
}
case
f
.
Name
()
==
"console"
:
continue
}
device
,
err
:=
deviceFromPath
(
filepath
.
Join
(
path
,
f
.
Name
()),
"rwm"
)
if
err
!=
nil
{
if
err
!=
nil
{
if
err
==
ErrNotADevice
{
return
err
continue
}
if
os
.
IsNotExist
(
err
)
{
continue
}
return
nil
,
err
}
}
out
=
append
(
out
,
*
device
)
for
_
,
dev
:=
range
devs
{
}
s
.
Linux
.
Devices
=
append
(
s
.
Linux
.
Devices
,
dev
)
return
out
,
nil
s
.
Linux
.
Resources
.
Devices
=
append
(
s
.
Linux
.
Resources
.
Devices
,
specs
.
LinuxDeviceCgroup
{
}
Allow
:
true
,
Type
:
dev
.
Type
,
func
deviceFromPath
(
path
,
permissions
string
)
(
*
specs
.
LinuxDevice
,
error
)
{
Major
:
&
dev
.
Major
,
var
stat
unix
.
Stat_t
Minor
:
&
dev
.
Minor
,
if
err
:=
unix
.
Lstat
(
path
,
&
stat
);
err
!=
nil
{
Access
:
permissions
,
return
nil
,
err
})
}
}
return
nil
var
(
// The type is 32bit on mips.
devNumber
=
uint64
(
stat
.
Rdev
)
// nolint: unconvert
major
=
unix
.
Major
(
devNumber
)
minor
=
unix
.
Minor
(
devNumber
)
)
if
major
==
0
{
return
nil
,
ErrNotADevice
}
var
(
devType
string
mode
=
stat
.
Mode
)
switch
{
case
mode
&
unix
.
S_IFBLK
==
unix
.
S_IFBLK
:
devType
=
"b"
case
mode
&
unix
.
S_IFCHR
==
unix
.
S_IFCHR
:
devType
=
"c"
}
}
fm
:=
os
.
FileMode
(
mode
)
return
&
specs
.
LinuxDevice
{
Type
:
devType
,
Path
:
path
,
Major
:
int64
(
major
),
Minor
:
int64
(
minor
),
FileMode
:
&
fm
,
UID
:
&
stat
.
Uid
,
GID
:
&
stat
.
Gid
,
},
nil
}
}
// WithMemorySwap sets the container's swap in bytes
// WithMemorySwap sets the container's swap in bytes
...
@@ -180,3 +122,24 @@ func WithCPUCFS(quota int64, period uint64) SpecOpts {
...
@@ -180,3 +122,24 @@ func WithCPUCFS(quota int64, period uint64) SpecOpts {
return
nil
return
nil
}
}
}
}
// WithAllCurrentCapabilities propagates the effective capabilities of the caller process to the container process.
// The capability set may differ from WithAllKnownCapabilities when running in a container.
var
WithAllCurrentCapabilities
=
func
(
ctx
context
.
Context
,
client
Client
,
c
*
containers
.
Container
,
s
*
Spec
)
error
{
caps
,
err
:=
cap
.
Current
()
if
err
!=
nil
{
return
err
}
return
WithCapabilities
(
caps
)(
ctx
,
client
,
c
,
s
)
}
// WithAllKnownCapabilities sets all the the known linux capabilities for the container process
var
WithAllKnownCapabilities
=
func
(
ctx
context
.
Context
,
client
Client
,
c
*
containers
.
Container
,
s
*
Spec
)
error
{
caps
:=
cap
.
Known
()
return
WithCapabilities
(
caps
)(
ctx
,
client
,
c
,
s
)
}
// WithoutRunMount removes the `/run` inside the spec
func
WithoutRunMount
(
ctx
context
.
Context
,
client
Client
,
c
*
containers
.
Container
,
s
*
Spec
)
error
{
return
WithoutMounts
(
"/run"
)(
ctx
,
client
,
c
,
s
)
}
vendor/github.com/containerd/containerd/oci/spec_opts_nonlinux.go
0 → 100644
View file @
c2e561f2
// +build !linux
/*
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
oci
import
(
"context"
"github.com/containerd/containerd/containers"
)
// WithAllCurrentCapabilities propagates the effective capabilities of the caller process to the container process.
// The capability set may differ from WithAllKnownCapabilities when running in a container.
//nolint: deadcode, unused
var
WithAllCurrentCapabilities
=
func
(
ctx
context
.
Context
,
client
Client
,
c
*
containers
.
Container
,
s
*
Spec
)
error
{
return
WithCapabilities
(
nil
)(
ctx
,
client
,
c
,
s
)
}
// WithAllKnownCapabilities sets all the the known linux capabilities for the container process
//nolint: deadcode, unused
var
WithAllKnownCapabilities
=
func
(
ctx
context
.
Context
,
client
Client
,
c
*
containers
.
Container
,
s
*
Spec
)
error
{
return
WithCapabilities
(
nil
)(
ctx
,
client
,
c
,
s
)
}
vendor/github.com/containerd/containerd/oci/spec_opts_unix.go
View file @
c2e561f2
...
@@ -20,20 +20,15 @@ package oci
...
@@ -20,20 +20,15 @@ package oci
import
(
import
(
"context"
"context"
"io/ioutil"
"os"
"path/filepath"
"github.com/containerd/containerd/containers"
"github.com/containerd/containerd/containers"
specs
"github.com/opencontainers/runtime-spec/specs-go"
"golang.org/x/sys/unix"
)
)
// WithHostDevices adds all the hosts device nodes to the container's spec
// WithHostDevices adds all the hosts device nodes to the container's spec
func
WithHostDevices
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
func
WithHostDevices
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
setLinux
(
s
)
setLinux
(
s
)
devs
,
err
:=
getDevices
(
"/dev"
)
devs
,
err
:=
HostDevices
(
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -41,82 +36,18 @@ func WithHostDevices(_ context.Context, _ Client, _ *containers.Container, s *Sp
...
@@ -41,82 +36,18 @@ func WithHostDevices(_ context.Context, _ Client, _ *containers.Container, s *Sp
return
nil
return
nil
}
}
func
getDevices
(
path
string
)
([]
specs
.
LinuxDevice
,
error
)
{
// WithDevices recursively adds devices from the passed in path and associated cgroup rules for that device.
files
,
err
:=
ioutil
.
ReadDir
(
path
)
// If devicePath is a dir it traverses the dir to add all devices in that dir.
if
err
!=
nil
{
// If devicePath is not a dir, it attempts to add the single device.
return
nil
,
err
func
WithDevices
(
devicePath
,
containerPath
,
permissions
string
)
SpecOpts
{
}
return
func
(
_
context
.
Context
,
_
Client
,
_
*
containers
.
Container
,
s
*
Spec
)
error
{
var
out
[]
specs
.
LinuxDevice
devs
,
err
:=
getDevices
(
devicePath
,
containerPath
)
for
_
,
f
:=
range
files
{
switch
{
case
f
.
IsDir
()
:
switch
f
.
Name
()
{
// ".lxc" & ".lxd-mounts" added to address https://github.com/lxc/lxd/issues/2825
// ".udev" added to address https://github.com/opencontainers/runc/issues/2093
case
"pts"
,
"shm"
,
"fd"
,
"mqueue"
,
".lxc"
,
".lxd-mounts"
,
".udev"
:
continue
default
:
sub
,
err
:=
getDevices
(
filepath
.
Join
(
path
,
f
.
Name
()))
if
err
!=
nil
{
return
nil
,
err
}
out
=
append
(
out
,
sub
...
)
continue
}
case
f
.
Name
()
==
"console"
:
continue
}
device
,
err
:=
deviceFromPath
(
filepath
.
Join
(
path
,
f
.
Name
()),
"rwm"
)
if
err
!=
nil
{
if
err
!=
nil
{
if
err
==
ErrNotADevice
{
return
err
continue
}
if
os
.
IsNotExist
(
err
)
{
continue
}
return
nil
,
err
}
}
out
=
append
(
out
,
*
device
)
s
.
Linux
.
Devices
=
append
(
s
.
Linux
.
Devices
,
devs
...
)
}
return
nil
return
out
,
nil
}
func
deviceFromPath
(
path
,
permissions
string
)
(
*
specs
.
LinuxDevice
,
error
)
{
var
stat
unix
.
Stat_t
if
err
:=
unix
.
Lstat
(
path
,
&
stat
);
err
!=
nil
{
return
nil
,
err
}
var
(
devNumber
=
uint64
(
stat
.
Rdev
)
major
=
unix
.
Major
(
devNumber
)
minor
=
unix
.
Minor
(
devNumber
)
)
if
major
==
0
{
return
nil
,
ErrNotADevice
}
var
(
devType
string
mode
=
stat
.
Mode
)
switch
{
case
mode
&
unix
.
S_IFBLK
==
unix
.
S_IFBLK
:
devType
=
"b"
case
mode
&
unix
.
S_IFCHR
==
unix
.
S_IFCHR
:
devType
=
"c"
}
}
fm
:=
os
.
FileMode
(
mode
)
return
&
specs
.
LinuxDevice
{
Type
:
devType
,
Path
:
path
,
Major
:
int64
(
major
),
Minor
:
int64
(
minor
),
FileMode
:
&
fm
,
UID
:
&
stat
.
Uid
,
GID
:
&
stat
.
Gid
,
},
nil
}
}
// WithCPUCFS sets the container's Completely fair scheduling (CFS) quota and period
// WithCPUCFS sets the container's Completely fair scheduling (CFS) quota and period
...
...
vendor/github.com/containerd/containerd/oci/spec_opts_windows.go
View file @
c2e561f2
...
@@ -74,6 +74,6 @@ func WithHostDevices(_ context.Context, _ Client, _ *containers.Container, s *Sp
...
@@ -74,6 +74,6 @@ func WithHostDevices(_ context.Context, _ Client, _ *containers.Container, s *Sp
return
nil
return
nil
}
}
func
deviceFromPath
(
path
,
permissions
string
)
(
*
specs
.
LinuxDevice
,
error
)
{
func
deviceFromPath
(
path
string
)
(
*
specs
.
LinuxDevice
,
error
)
{
return
nil
,
errors
.
New
(
"device from path not supported on Windows"
)
return
nil
,
errors
.
New
(
"device from path not supported on Windows"
)
}
}
vendor/github.com/containerd/containerd/oci/utils_unix.go
0 → 100644
View file @
c2e561f2
// +build !windows
/*
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
oci
import
(
"io/ioutil"
"os"
"path/filepath"
specs
"github.com/opencontainers/runtime-spec/specs-go"
"github.com/pkg/errors"
"golang.org/x/sys/unix"
)
var
errNotADevice
=
errors
.
New
(
"not a device node"
)
// HostDevices returns all devices that can be found under /dev directory.
func
HostDevices
()
([]
specs
.
LinuxDevice
,
error
)
{
return
getDevices
(
"/dev"
,
""
)
}
func
getDevices
(
path
,
containerPath
string
)
([]
specs
.
LinuxDevice
,
error
)
{
stat
,
err
:=
os
.
Stat
(
path
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"error stating device path"
)
}
if
!
stat
.
IsDir
()
{
dev
,
err
:=
deviceFromPath
(
path
)
if
err
!=
nil
{
return
nil
,
err
}
if
containerPath
!=
""
{
dev
.
Path
=
containerPath
}
return
[]
specs
.
LinuxDevice
{
*
dev
},
nil
}
files
,
err
:=
ioutil
.
ReadDir
(
path
)
if
err
!=
nil
{
return
nil
,
err
}
var
out
[]
specs
.
LinuxDevice
for
_
,
f
:=
range
files
{
switch
{
case
f
.
IsDir
()
:
switch
f
.
Name
()
{
// ".lxc" & ".lxd-mounts" added to address https://github.com/lxc/lxd/issues/2825
// ".udev" added to address https://github.com/opencontainers/runc/issues/2093
case
"pts"
,
"shm"
,
"fd"
,
"mqueue"
,
".lxc"
,
".lxd-mounts"
,
".udev"
:
continue
default
:
var
cp
string
if
containerPath
!=
""
{
cp
=
filepath
.
Join
(
containerPath
,
filepath
.
Base
(
f
.
Name
()))
}
sub
,
err
:=
getDevices
(
filepath
.
Join
(
path
,
f
.
Name
()),
cp
)
if
err
!=
nil
{
return
nil
,
err
}
out
=
append
(
out
,
sub
...
)
continue
}
case
f
.
Name
()
==
"console"
:
continue
}
device
,
err
:=
deviceFromPath
(
filepath
.
Join
(
path
,
f
.
Name
()))
if
err
!=
nil
{
if
err
==
errNotADevice
{
continue
}
if
os
.
IsNotExist
(
err
)
{
continue
}
return
nil
,
err
}
if
containerPath
!=
""
{
device
.
Path
=
filepath
.
Join
(
containerPath
,
filepath
.
Base
(
f
.
Name
()))
}
out
=
append
(
out
,
*
device
)
}
return
out
,
nil
}
func
deviceFromPath
(
path
string
)
(
*
specs
.
LinuxDevice
,
error
)
{
var
stat
unix
.
Stat_t
if
err
:=
unix
.
Lstat
(
path
,
&
stat
);
err
!=
nil
{
return
nil
,
err
}
var
(
devNumber
=
uint64
(
stat
.
Rdev
)
//nolint: unconvert // the type is 32bit on mips.
major
=
unix
.
Major
(
devNumber
)
minor
=
unix
.
Minor
(
devNumber
)
)
if
major
==
0
{
return
nil
,
errNotADevice
}
var
(
devType
string
mode
=
stat
.
Mode
)
switch
{
case
mode
&
unix
.
S_IFBLK
==
unix
.
S_IFBLK
:
devType
=
"b"
case
mode
&
unix
.
S_IFCHR
==
unix
.
S_IFCHR
:
devType
=
"c"
}
fm
:=
os
.
FileMode
(
mode
&^
unix
.
S_IFMT
)
return
&
specs
.
LinuxDevice
{
Type
:
devType
,
Path
:
path
,
Major
:
int64
(
major
),
Minor
:
int64
(
minor
),
FileMode
:
&
fm
,
UID
:
&
stat
.
Uid
,
GID
:
&
stat
.
Gid
,
},
nil
}
vendor/github.com/containerd/containerd/pkg/cap/cap_linux.go
0 → 100644
View file @
c2e561f2
/*
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 cap provides Linux capability utility
package
cap
import
(
"bufio"
"io"
"os"
"strconv"
"strings"
"github.com/pkg/errors"
)
// FromNumber returns a cap string like "CAP_SYS_ADMIN"
// that corresponds to the given number like 21.
//
// FromNumber returns an empty string for unknown cap number.
func
FromNumber
(
num
int
)
string
{
if
num
<
0
||
num
>
len
(
capsLatest
)
-
1
{
return
""
}
return
capsLatest
[
num
]
}
// FromBitmap parses an uint64 bitmap into string slice like
// []{"CAP_SYS_ADMIN", ...}.
//
// Unknown cap numbers are returned as []int.
func
FromBitmap
(
v
uint64
)
([]
string
,
[]
int
)
{
var
(
res
[]
string
unknown
[]
int
)
for
i
:=
0
;
i
<=
63
;
i
++
{
if
b
:=
(
v
>>
i
)
&
0x1
;
b
==
0x1
{
if
s
:=
FromNumber
(
i
);
s
!=
""
{
res
=
append
(
res
,
s
)
}
else
{
unknown
=
append
(
unknown
,
i
)
}
}
}
return
res
,
unknown
}
// Type is the type of capability
type
Type
int
const
(
// Effective is CapEff
Effective
Type
=
1
<<
iota
// Permitted is CapPrm
Permitted
// Inheritable is CapInh
Inheritable
// Bounding is CapBnd
Bounding
// Ambient is CapAmb
Ambient
)
// ParseProcPIDStatus returns uint64 bitmap value from /proc/<PID>/status file
func
ParseProcPIDStatus
(
r
io
.
Reader
)
(
map
[
Type
]
uint64
,
error
)
{
res
:=
make
(
map
[
Type
]
uint64
)
scanner
:=
bufio
.
NewScanner
(
r
)
for
scanner
.
Scan
()
{
line
:=
scanner
.
Text
()
pair
:=
strings
.
SplitN
(
line
,
":"
,
2
)
if
len
(
pair
)
!=
2
{
continue
}
k
:=
strings
.
TrimSpace
(
pair
[
0
])
v
:=
strings
.
TrimSpace
(
pair
[
1
])
switch
k
{
case
"CapInh"
,
"CapPrm"
,
"CapEff"
,
"CapBnd"
,
"CapAmb"
:
ui64
,
err
:=
strconv
.
ParseUint
(
v
,
16
,
64
)
if
err
!=
nil
{
return
nil
,
errors
.
Errorf
(
"failed to parse line %q"
,
line
)
}
switch
k
{
case
"CapInh"
:
res
[
Inheritable
]
=
ui64
case
"CapPrm"
:
res
[
Permitted
]
=
ui64
case
"CapEff"
:
res
[
Effective
]
=
ui64
case
"CapBnd"
:
res
[
Bounding
]
=
ui64
case
"CapAmb"
:
res
[
Ambient
]
=
ui64
}
}
}
if
err
:=
scanner
.
Err
();
err
!=
nil
{
return
nil
,
err
}
return
res
,
nil
}
// Current returns the list of the effective and the known caps of
// the current process.
//
// The result is like []string{"CAP_SYS_ADMIN", ...}.
//
// The result does not contain caps that are not recognized by
// the "github.com/syndtr/gocapability" library.
func
Current
()
([]
string
,
error
)
{
f
,
err
:=
os
.
Open
(
"/proc/self/status"
)
if
err
!=
nil
{
return
nil
,
err
}
defer
f
.
Close
()
caps
,
err
:=
ParseProcPIDStatus
(
f
)
if
err
!=
nil
{
return
nil
,
err
}
capEff
:=
caps
[
Effective
]
names
,
_
:=
FromBitmap
(
capEff
)
return
names
,
nil
}
var
(
// caps35 is the caps of kernel 3.5 (37 entries)
caps35
=
[]
string
{
"CAP_CHOWN"
,
// 2.2
"CAP_DAC_OVERRIDE"
,
// 2.2
"CAP_DAC_READ_SEARCH"
,
// 2.2
"CAP_FOWNER"
,
// 2.2
"CAP_FSETID"
,
// 2.2
"CAP_KILL"
,
// 2.2
"CAP_SETGID"
,
// 2.2
"CAP_SETUID"
,
// 2.2
"CAP_SETPCAP"
,
// 2.2
"CAP_LINUX_IMMUTABLE"
,
// 2.2
"CAP_NET_BIND_SERVICE"
,
// 2.2
"CAP_NET_BROADCAST"
,
// 2.2
"CAP_NET_ADMIN"
,
// 2.2
"CAP_NET_RAW"
,
// 2.2
"CAP_IPC_LOCK"
,
// 2.2
"CAP_IPC_OWNER"
,
// 2.2
"CAP_SYS_MODULE"
,
// 2.2
"CAP_SYS_RAWIO"
,
// 2.2
"CAP_SYS_CHROOT"
,
// 2.2
"CAP_SYS_PTRACE"
,
// 2.2
"CAP_SYS_PACCT"
,
// 2.2
"CAP_SYS_ADMIN"
,
// 2.2
"CAP_SYS_BOOT"
,
// 2.2
"CAP_SYS_NICE"
,
// 2.2
"CAP_SYS_RESOURCE"
,
// 2.2
"CAP_SYS_TIME"
,
// 2.2
"CAP_SYS_TTY_CONFIG"
,
// 2.2
"CAP_MKNOD"
,
// 2.4
"CAP_LEASE"
,
// 2.4
"CAP_AUDIT_WRITE"
,
// 2.6.11
"CAP_AUDIT_CONTROL"
,
// 2.6.11
"CAP_SETFCAP"
,
// 2.6.24
"CAP_MAC_OVERRIDE"
,
// 2.6.25
"CAP_MAC_ADMIN"
,
// 2.6.25
"CAP_SYSLOG"
,
// 2.6.37
"CAP_WAKE_ALARM"
,
// 3.0
"CAP_BLOCK_SUSPEND"
,
// 3.5
}
// caps316 is the caps of kernel 3.16 (38 entries)
caps316
=
append
(
caps35
,
"CAP_AUDIT_READ"
)
// caps58 is the caps of kernel 5.8 (40 entries)
caps58
=
append
(
caps316
,
[]
string
{
"CAP_PERFMON"
,
"CAP_BPF"
}
...
)
// caps59 is the caps of kernel 5.9 (41 entries)
caps59
=
append
(
caps58
,
"CAP_CHECKPOINT_RESTORE"
)
capsLatest
=
caps59
)
// Known returns the known cap strings of the latest kernel.
// The current latest kernel is 5.9.
func
Known
()
[]
string
{
return
capsLatest
}
vendor/github.com/containerd/cri/pkg/cap/cap_linux.go
0 → 100644
View file @
c2e561f2
/*
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 cap provides Linux capability utility
package
cap
import
(
"bufio"
"io"
"os"
"strconv"
"strings"
"github.com/pkg/errors"
)
// FromNumber returns a cap string like "CAP_SYS_ADMIN"
// that corresponds to the given number like 21.
//
// FromNumber returns an empty string for unknown cap number.
func
FromNumber
(
num
int
)
string
{
if
num
<
0
||
num
>
len
(
capsLatest
)
-
1
{
return
""
}
return
capsLatest
[
num
]
}
// FromBitmap parses an uint64 bitmap into string slice like
// []{"CAP_SYS_ADMIN", ...}.
//
// Unknown cap numbers are returned as []int.
func
FromBitmap
(
v
uint64
)
([]
string
,
[]
int
)
{
var
(
res
[]
string
unknown
[]
int
)
for
i
:=
0
;
i
<=
63
;
i
++
{
if
b
:=
(
v
>>
i
)
&
0x1
;
b
==
0x1
{
if
s
:=
FromNumber
(
i
);
s
!=
""
{
res
=
append
(
res
,
s
)
}
else
{
unknown
=
append
(
unknown
,
i
)
}
}
}
return
res
,
unknown
}
// Type is the type of capability
type
Type
int
const
(
// Effective is CapEff
Effective
Type
=
1
<<
iota
// Permitted is CapPrm
Permitted
// Inheritable is CapInh
Inheritable
// Bounding is CapBnd
Bounding
// Ambient is CapAmb
Ambient
)
// ParseProcPIDStatus returns uint64 bitmap value from /proc/<PID>/status file
func
ParseProcPIDStatus
(
r
io
.
Reader
)
(
map
[
Type
]
uint64
,
error
)
{
res
:=
make
(
map
[
Type
]
uint64
)
scanner
:=
bufio
.
NewScanner
(
r
)
for
scanner
.
Scan
()
{
line
:=
scanner
.
Text
()
pair
:=
strings
.
SplitN
(
line
,
":"
,
2
)
if
len
(
pair
)
!=
2
{
continue
}
k
:=
strings
.
TrimSpace
(
pair
[
0
])
v
:=
strings
.
TrimSpace
(
pair
[
1
])
switch
k
{
case
"CapInh"
,
"CapPrm"
,
"CapEff"
,
"CapBnd"
,
"CapAmb"
:
ui64
,
err
:=
strconv
.
ParseUint
(
v
,
16
,
64
)
if
err
!=
nil
{
return
nil
,
errors
.
Errorf
(
"failed to parse line %q"
,
line
)
}
switch
k
{
case
"CapInh"
:
res
[
Inheritable
]
=
ui64
case
"CapPrm"
:
res
[
Permitted
]
=
ui64
case
"CapEff"
:
res
[
Effective
]
=
ui64
case
"CapBnd"
:
res
[
Bounding
]
=
ui64
case
"CapAmb"
:
res
[
Ambient
]
=
ui64
}
}
}
if
err
:=
scanner
.
Err
();
err
!=
nil
{
return
nil
,
err
}
return
res
,
nil
}
// Current returns the list of the effective and the known caps of
// the current process.
//
// The result is like []string{"CAP_SYS_ADMIN", ...}.
//
// The result does not contain caps that are not recognized by
// the "github.com/syndtr/gocapability" library.
func
Current
()
([]
string
,
error
)
{
f
,
err
:=
os
.
Open
(
"/proc/self/status"
)
if
err
!=
nil
{
return
nil
,
err
}
defer
f
.
Close
()
caps
,
err
:=
ParseProcPIDStatus
(
f
)
if
err
!=
nil
{
return
nil
,
err
}
capEff
:=
caps
[
Effective
]
names
,
_
:=
FromBitmap
(
capEff
)
return
names
,
nil
}
var
(
// caps35 is the caps of kernel 3.5 (37 entries)
caps35
=
[]
string
{
"CAP_CHOWN"
,
// 2.2
"CAP_DAC_OVERRIDE"
,
// 2.2
"CAP_DAC_READ_SEARCH"
,
// 2.2
"CAP_FOWNER"
,
// 2.2
"CAP_FSETID"
,
// 2.2
"CAP_KILL"
,
// 2.2
"CAP_SETGID"
,
// 2.2
"CAP_SETUID"
,
// 2.2
"CAP_SETPCAP"
,
// 2.2
"CAP_LINUX_IMMUTABLE"
,
// 2.2
"CAP_NET_BIND_SERVICE"
,
// 2.2
"CAP_NET_BROADCAST"
,
// 2.2
"CAP_NET_ADMIN"
,
// 2.2
"CAP_NET_RAW"
,
// 2.2
"CAP_IPC_LOCK"
,
// 2.2
"CAP_IPC_OWNER"
,
// 2.2
"CAP_SYS_MODULE"
,
// 2.2
"CAP_SYS_RAWIO"
,
// 2.2
"CAP_SYS_CHROOT"
,
// 2.2
"CAP_SYS_PTRACE"
,
// 2.2
"CAP_SYS_PACCT"
,
// 2.2
"CAP_SYS_ADMIN"
,
// 2.2
"CAP_SYS_BOOT"
,
// 2.2
"CAP_SYS_NICE"
,
// 2.2
"CAP_SYS_RESOURCE"
,
// 2.2
"CAP_SYS_TIME"
,
// 2.2
"CAP_SYS_TTY_CONFIG"
,
// 2.2
"CAP_MKNOD"
,
// 2.4
"CAP_LEASE"
,
// 2.4
"CAP_AUDIT_WRITE"
,
// 2.6.11
"CAP_AUDIT_CONTROL"
,
// 2.6.11
"CAP_SETFCAP"
,
// 2.6.24
"CAP_MAC_OVERRIDE"
,
// 2.6.25
"CAP_MAC_ADMIN"
,
// 2.6.25
"CAP_SYSLOG"
,
// 2.6.37
"CAP_WAKE_ALARM"
,
// 3.0
"CAP_BLOCK_SUSPEND"
,
// 3.5
}
// caps316 is the caps of kernel 3.16 (38 entries)
caps316
=
append
(
caps35
,
"CAP_AUDIT_READ"
)
// caps58 is the caps of kernel 5.8 (40 entries)
caps58
=
append
(
caps316
,
[]
string
{
"CAP_PERFMON"
,
"CAP_BPF"
}
...
)
// caps59 is the caps of kernel 5.9 (41 entries)
caps59
=
append
(
caps58
,
"CAP_CHECKPOINT_RESTORE"
)
capsLatest
=
caps59
)
// Known returns the known cap strings of the latest kernel.
// The current latest kernel is 5.9.
func
Known
()
[]
string
{
return
capsLatest
}
vendor/github.com/containerd/cri/pkg/containerd/opts/spec_unix.go
View file @
c2e561f2
...
@@ -332,7 +332,7 @@ func WithDevices(osi osinterface.OS, config *runtime.ContainerConfig) oci.SpecOp
...
@@ -332,7 +332,7 @@ func WithDevices(osi osinterface.OS, config *runtime.ContainerConfig) oci.SpecOp
}
}
// WithCapabilities sets the provided capabilties from the security context
// WithCapabilities sets the provided capabilties from the security context
func
WithCapabilities
(
sc
*
runtime
.
LinuxContainerSecurityContext
)
oci
.
SpecOpts
{
func
WithCapabilities
(
sc
*
runtime
.
LinuxContainerSecurityContext
,
allCaps
[]
string
)
oci
.
SpecOpts
{
capabilities
:=
sc
.
GetCapabilities
()
capabilities
:=
sc
.
GetCapabilities
()
if
capabilities
==
nil
{
if
capabilities
==
nil
{
return
nullOpt
return
nullOpt
...
@@ -344,7 +344,7 @@ func WithCapabilities(sc *runtime.LinuxContainerSecurityContext) oci.SpecOpts {
...
@@ -344,7 +344,7 @@ func WithCapabilities(sc *runtime.LinuxContainerSecurityContext) oci.SpecOpts {
// AddCapabilities: []string{"ALL"}, DropCapabilities: []string{"CHOWN"}
// AddCapabilities: []string{"ALL"}, DropCapabilities: []string{"CHOWN"}
// will be all capabilities without `CAP_CHOWN`.
// will be all capabilities without `CAP_CHOWN`.
if
util
.
InStringSlice
(
capabilities
.
GetAddCapabilities
(),
"ALL"
)
{
if
util
.
InStringSlice
(
capabilities
.
GetAddCapabilities
(),
"ALL"
)
{
opts
=
append
(
opts
,
oci
.
With
AllCapabilities
)
opts
=
append
(
opts
,
oci
.
With
Capabilities
(
allCaps
)
)
}
}
if
util
.
InStringSlice
(
capabilities
.
GetDropCapabilities
(),
"ALL"
)
{
if
util
.
InStringSlice
(
capabilities
.
GetDropCapabilities
(),
"ALL"
)
{
opts
=
append
(
opts
,
oci
.
WithCapabilities
(
nil
))
opts
=
append
(
opts
,
oci
.
WithCapabilities
(
nil
))
...
...
vendor/github.com/containerd/cri/pkg/server/container_create_unix.go
View file @
c2e561f2
...
@@ -203,10 +203,10 @@ func (c *criService) containerSpec(id string, sandboxID string, sandboxPid uint3
...
@@ -203,10 +203,10 @@ func (c *criService) containerSpec(id string, sandboxID string, sandboxPid uint3
specOpts
=
append
(
specOpts
,
oci
.
WithHostDevices
,
oci
.
WithAllDevicesAllowed
)
specOpts
=
append
(
specOpts
,
oci
.
WithHostDevices
,
oci
.
WithAllDevicesAllowed
)
}
else
{
}
else
{
// add requested devices by the config as host devices are not automatically added
// add requested devices by the config as host devices are not automatically added
specOpts
=
append
(
specOpts
,
customopts
.
WithDevices
(
c
.
os
,
config
),
customopts
.
WithCapabilities
(
securityContext
))
specOpts
=
append
(
specOpts
,
customopts
.
WithDevices
(
c
.
os
,
config
),
customopts
.
WithCapabilities
(
securityContext
,
c
.
allCaps
))
}
}
}
else
{
// not privileged
}
else
{
// not privileged
specOpts
=
append
(
specOpts
,
customopts
.
WithDevices
(
c
.
os
,
config
),
customopts
.
WithCapabilities
(
securityContext
))
specOpts
=
append
(
specOpts
,
customopts
.
WithDevices
(
c
.
os
,
config
),
customopts
.
WithCapabilities
(
securityContext
,
c
.
allCaps
))
}
}
// Clear all ambient capabilities. The implication of non-root + caps
// Clear all ambient capabilities. The implication of non-root + caps
...
...
vendor/github.com/containerd/cri/pkg/server/service.go
View file @
c2e561f2
...
@@ -101,6 +101,9 @@ type criService struct {
...
@@ -101,6 +101,9 @@ type criService struct {
cniNetConfMonitor
*
cniNetConfSyncer
cniNetConfMonitor
*
cniNetConfSyncer
// baseOCISpecs contains cached OCI specs loaded via `Runtime.BaseRuntimeSpec`
// baseOCISpecs contains cached OCI specs loaded via `Runtime.BaseRuntimeSpec`
baseOCISpecs
map
[
string
]
*
oci
.
Spec
baseOCISpecs
map
[
string
]
*
oci
.
Spec
// allCaps is the list of the capabilities.
// When nil, parsed from CapEff of /proc/self/status.
allCaps
[]
string
// nolint
}
}
// NewCRIService returns a new instance of CRIService
// NewCRIService returns a new instance of CRIService
...
...
vendor/github.com/containerd/cri/pkg/server/service_unix.go
View file @
c2e561f2
...
@@ -20,6 +20,7 @@ package server
...
@@ -20,6 +20,7 @@ package server
import
(
import
(
"github.com/containerd/containerd/sys"
"github.com/containerd/containerd/sys"
"github.com/containerd/cri/pkg/cap"
cni
"github.com/containerd/go-cni"
cni
"github.com/containerd/go-cni"
"github.com/opencontainers/selinux/go-selinux"
"github.com/opencontainers/selinux/go-selinux"
"github.com/pkg/errors"
"github.com/pkg/errors"
...
@@ -63,6 +64,13 @@ func (c *criService) initPlatform() error {
...
@@ -63,6 +64,13 @@ func (c *criService) initPlatform() error {
return
errors
.
Wrap
(
err
,
"failed to initialize cni"
)
return
errors
.
Wrap
(
err
,
"failed to initialize cni"
)
}
}
if
c
.
allCaps
==
nil
{
c
.
allCaps
,
err
=
cap
.
Current
()
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to get caps"
)
}
}
return
nil
return
nil
}
}
...
...
vendor/modules.txt
View file @
c2e561f2
...
@@ -173,7 +173,7 @@ github.com/containerd/cgroups/v2
...
@@ -173,7 +173,7 @@ github.com/containerd/cgroups/v2
github.com/containerd/cgroups/v2/stats
github.com/containerd/cgroups/v2/stats
# github.com/containerd/console v1.0.2 => github.com/containerd/console v1.0.0
# github.com/containerd/console v1.0.2 => github.com/containerd/console v1.0.0
github.com/containerd/console
github.com/containerd/console
# github.com/containerd/containerd v1.5.0-beta.4 => github.com/k3s-io/containerd v1.4.4-k3s
1
# github.com/containerd/containerd v1.5.0-beta.4 => github.com/k3s-io/containerd v1.4.4-k3s
2
## explicit
## explicit
github.com/containerd/containerd
github.com/containerd/containerd
github.com/containerd/containerd/api/events
github.com/containerd/containerd/api/events
...
@@ -249,6 +249,7 @@ github.com/containerd/containerd/metrics/types/v2
...
@@ -249,6 +249,7 @@ github.com/containerd/containerd/metrics/types/v2
github.com/containerd/containerd/mount
github.com/containerd/containerd/mount
github.com/containerd/containerd/namespaces
github.com/containerd/containerd/namespaces
github.com/containerd/containerd/oci
github.com/containerd/containerd/oci
github.com/containerd/containerd/pkg/cap
github.com/containerd/containerd/pkg/dialer
github.com/containerd/containerd/pkg/dialer
github.com/containerd/containerd/pkg/oom
github.com/containerd/containerd/pkg/oom
github.com/containerd/containerd/pkg/oom/v1
github.com/containerd/containerd/pkg/oom/v1
...
@@ -317,12 +318,13 @@ github.com/containerd/continuity/fs
...
@@ -317,12 +318,13 @@ github.com/containerd/continuity/fs
github.com/containerd/continuity/pathdriver
github.com/containerd/continuity/pathdriver
github.com/containerd/continuity/proto
github.com/containerd/continuity/proto
github.com/containerd/continuity/sysx
github.com/containerd/continuity/sysx
# github.com/containerd/cri v1.11.1-0.20200820101445-b0cc07999aa5 => github.com/k3s-io/cri v1.4.0-k3s.
5
# github.com/containerd/cri v1.11.1-0.20200820101445-b0cc07999aa5 => github.com/k3s-io/cri v1.4.0-k3s.
6
## explicit
## explicit
github.com/containerd/cri
github.com/containerd/cri
github.com/containerd/cri/pkg/annotations
github.com/containerd/cri/pkg/annotations
github.com/containerd/cri/pkg/api/runtimeoptions/v1
github.com/containerd/cri/pkg/api/runtimeoptions/v1
github.com/containerd/cri/pkg/atomic
github.com/containerd/cri/pkg/atomic
github.com/containerd/cri/pkg/cap
github.com/containerd/cri/pkg/config
github.com/containerd/cri/pkg/config
github.com/containerd/cri/pkg/constants
github.com/containerd/cri/pkg/constants
github.com/containerd/cri/pkg/containerd/opts
github.com/containerd/cri/pkg/containerd/opts
...
@@ -3179,9 +3181,9 @@ sigs.k8s.io/yaml
...
@@ -3179,9 +3181,9 @@ sigs.k8s.io/yaml
# github.com/containerd/btrfs => github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e
# github.com/containerd/btrfs => github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e
# github.com/containerd/cgroups => github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340
# github.com/containerd/cgroups => github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340
# github.com/containerd/console => github.com/containerd/console v1.0.0
# github.com/containerd/console => github.com/containerd/console v1.0.0
# github.com/containerd/containerd => github.com/k3s-io/containerd v1.4.4-k3s
1
# github.com/containerd/containerd => github.com/k3s-io/containerd v1.4.4-k3s
2
# github.com/containerd/continuity => github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1
# github.com/containerd/continuity => github.com/k3s-io/continuity v0.0.0-20210309170710-f93269e0d5c1
# github.com/containerd/cri => github.com/k3s-io/cri v1.4.0-k3s.
5
# github.com/containerd/cri => github.com/k3s-io/cri v1.4.0-k3s.
6
# github.com/containerd/fifo => github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b
# github.com/containerd/fifo => github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b
# github.com/containerd/go-runc => github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328
# github.com/containerd/go-runc => github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328
# github.com/containerd/ttrpc => github.com/containerd/ttrpc v1.0.1
# github.com/containerd/ttrpc => github.com/containerd/ttrpc v1.0.1
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment