From b59bd59d8a444b072b4b097b5f4cf5d7ec7d4fde Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Thu, 26 Jan 2017 11:29:19 -0800 Subject: [PATCH] Working tty and io support in shim Signed-off-by: Michael Crosby --- api/shim/shim.pb.go | 127 ++++++++++++++++++++---------------- api/shim/shim.proto | 3 + cmd/containerd-shim/main.go | 6 +- cmd/ctr/shim.go | 63 ++++++++++++++++-- shim/exec.go | 10 ++- shim/init.go | 10 ++- shim/io.go | 3 +- shim/process.go | 4 +- shim/service.go | 24 ++++++- 9 files changed, 171 insertions(+), 79 deletions(-) diff --git a/api/shim/shim.pb.go b/api/shim/shim.pb.go index aba37bf..4204c5b 100644 --- a/api/shim/shim.pb.go +++ b/api/shim/shim.pb.go @@ -57,17 +57,26 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type EventType int32 const ( - EventType_EXIT EventType = 0 - EventType_OOM EventType = 1 + EventType_EXIT EventType = 0 + EventType_OOM EventType = 1 + EventType_CREATED EventType = 2 + EventType_STARTED EventType = 3 + EventType_EXEC_ADDED EventType = 4 ) var EventType_name = map[int32]string{ 0: "EXIT", 1: "OOM", + 2: "CREATED", + 3: "STARTED", + 4: "EXEC_ADDED", } var EventType_value = map[string]int32{ - "EXIT": 0, - "OOM": 1, + "EXIT": 0, + "OOM": 1, + "CREATED": 2, + "STARTED": 3, + "EXEC_ADDED": 4, } func (x EventType) String() string { @@ -3244,58 +3253,60 @@ var ( func init() { proto.RegisterFile("shim.proto", fileDescriptorShim) } var fileDescriptorShim = []byte{ - // 835 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x54, 0xcf, 0x6f, 0xe3, 0x44, - 0x14, 0xae, 0x63, 0xe7, 0x47, 0x5f, 0x7e, 0xb4, 0x8c, 0x56, 0xd5, 0x6c, 0x00, 0x37, 0x98, 0x03, - 0x61, 0x85, 0x52, 0x5a, 0xb8, 0x72, 0x60, 0x69, 0x05, 0x95, 0x16, 0x1a, 0xb9, 0x8b, 0xc4, 0x2d, - 0x72, 0xea, 0x57, 0x67, 0x24, 0xc7, 0x63, 0x66, 0xc6, 0x69, 0x73, 0xe3, 0xc2, 0xdf, 0xc5, 0x81, - 0xcb, 0x1e, 0x39, 0x21, 0x4e, 0x88, 0xe6, 0x2f, 0xe0, 0x4f, 0x40, 0x33, 0xb6, 0x93, 0xa6, 0xeb, - 0xb0, 0xb7, 0xf7, 0xbe, 0x79, 0x7e, 0xf3, 0xde, 0xe7, 0x6f, 0x3e, 0x00, 0x39, 0x63, 0xf3, 0x51, - 0x2a, 0xb8, 0xe2, 0x84, 0xdc, 0xf0, 0x44, 0x05, 0x2c, 0x41, 0x11, 0x8e, 0x0c, 0xbc, 0x38, 0xed, - 0xbf, 0x1f, 0x71, 0x1e, 0xc5, 0x78, 0x62, 0x2a, 0xa6, 0xd9, 0xed, 0x09, 0xce, 0x53, 0xb5, 0xcc, - 0x3f, 0xe8, 0x3f, 0x8b, 0x78, 0xc4, 0x4d, 0x78, 0xa2, 0xa3, 0x1c, 0xf5, 0xfe, 0xb4, 0xa0, 0xfb, - 0x8d, 0xc0, 0x40, 0xa1, 0x8f, 0x3f, 0x67, 0x28, 0x15, 0x39, 0x82, 0x1a, 0x0b, 0xa9, 0x35, 0xb0, - 0x86, 0xfb, 0x2f, 0x1b, 0xab, 0xbf, 0x8f, 0x6b, 0x97, 0xe7, 0x7e, 0x8d, 0x85, 0xe4, 0x08, 0x1a, - 0xd3, 0x2c, 0x09, 0x63, 0xa4, 0x35, 0x7d, 0xe6, 0x17, 0x19, 0xa1, 0xd0, 0x14, 0x59, 0xa2, 0xd8, - 0x1c, 0xa9, 0x6d, 0x0e, 0xca, 0x94, 0x3c, 0x87, 0x56, 0xc2, 0x27, 0x29, 0x5b, 0x70, 0x45, 0x9d, - 0x81, 0x35, 0x6c, 0xf9, 0xcd, 0x84, 0x8f, 0x75, 0x4a, 0xfa, 0xd0, 0x52, 0x28, 0xe6, 0x2c, 0x09, - 0x62, 0x5a, 0x37, 0x47, 0xeb, 0x9c, 0x3c, 0x83, 0xba, 0x54, 0x21, 0x4b, 0x68, 0xc3, 0xb4, 0xcb, - 0x13, 0x7d, 0xbd, 0x54, 0x21, 0xcf, 0x14, 0x6d, 0xe6, 0xd7, 0xe7, 0x59, 0x81, 0xa3, 0x10, 0xb4, - 0xb5, 0xc6, 0x51, 0x08, 0xcf, 0x83, 0x5e, 0xb9, 0x97, 0x4c, 0x79, 0x22, 0x91, 0x1c, 0x82, 0x9d, - 0x16, 0x9b, 0x75, 0x7d, 0x1d, 0x7a, 0x3d, 0xe8, 0x5c, 0xab, 0x40, 0xa8, 0x62, 0x75, 0xef, 0x00, - 0xba, 0xe7, 0x18, 0xe3, 0x9a, 0x0b, 0xef, 0x14, 0x7a, 0x25, 0x50, 0x34, 0x39, 0x86, 0x36, 0xde, - 0x33, 0x35, 0x91, 0x2a, 0x50, 0x99, 0x2c, 0x9a, 0x81, 0x86, 0xae, 0x0d, 0xe2, 0xfd, 0x6e, 0x43, - 0xfb, 0xe2, 0x1e, 0x6f, 0xde, 0x45, 0xe7, 0x63, 0x06, 0x6a, 0xbb, 0x18, 0xb0, 0xab, 0x19, 0x70, - 0x76, 0x30, 0x50, 0x7f, 0xcc, 0x00, 0xf9, 0x0c, 0x9c, 0x4c, 0xa2, 0x30, 0x34, 0xb6, 0xcf, 0xe8, - 0xe8, 0x6d, 0xc1, 0x8c, 0x7e, 0x94, 0x28, 0x7c, 0x53, 0x45, 0x08, 0x38, 0x81, 0x88, 0x24, 0x6d, - 0x0e, 0xec, 0xe1, 0xbe, 0x6f, 0x62, 0xcd, 0x18, 0x26, 0x0b, 0xda, 0x32, 0x90, 0x0e, 0x35, 0x72, - 0x73, 0x17, 0xd2, 0x7d, 0x73, 0x91, 0x0e, 0x89, 0x07, 0x9d, 0x9b, 0x20, 0x0d, 0xa6, 0x2c, 0x66, - 0x8a, 0xa1, 0xa4, 0x60, 0x8a, 0xb7, 0x30, 0xf2, 0x25, 0x34, 0x45, 0xcc, 0xe6, 0x4c, 0x49, 0xda, - 0x1e, 0xd8, 0xc3, 0xf6, 0x59, 0xbf, 0x6a, 0x18, 0xdf, 0x94, 0xf8, 0x65, 0x29, 0x79, 0x01, 0xef, - 0x25, 0x7c, 0x92, 0xe0, 0xdd, 0x24, 0x15, 0x6c, 0xc1, 0x62, 0x8c, 0x50, 0xd2, 0x8e, 0xa1, 0xea, - 0x20, 0xe1, 0x3f, 0xe0, 0xdd, 0x78, 0x0d, 0x93, 0x4f, 0xe1, 0x30, 0x48, 0xd3, 0x40, 0xcc, 0xb9, - 0x98, 0xa4, 0x82, 0xdf, 0xb2, 0x18, 0x69, 0xd7, 0x0c, 0x79, 0x50, 0xe2, 0xe3, 0x1c, 0x26, 0x1f, - 0x43, 0x57, 0x62, 0xcc, 0x92, 0xec, 0x7e, 0x12, 0x07, 0x53, 0x8c, 0x69, 0xcf, 0xd4, 0x75, 0x0a, - 0xf0, 0x95, 0xc6, 0xbc, 0x6b, 0x70, 0x34, 0x37, 0x7a, 0xdf, 0x6c, 0xa3, 0x99, 0x8c, 0x85, 0x1a, - 0x89, 0x58, 0x68, 0x7e, 0x59, 0xd7, 0xd7, 0x21, 0xf9, 0x04, 0x0e, 0x82, 0x30, 0x64, 0x8a, 0xf1, - 0x24, 0x88, 0x27, 0x11, 0x0b, 0x25, 0xb5, 0x07, 0xf6, 0xb0, 0xeb, 0xf7, 0x36, 0xf0, 0xb7, 0x2c, - 0x94, 0xde, 0x39, 0x34, 0xf2, 0x1d, 0x35, 0xd9, 0x6a, 0x99, 0x62, 0x2e, 0x0b, 0xdf, 0xc4, 0x1a, - 0x9b, 0x05, 0x22, 0xef, 0xec, 0xf8, 0x26, 0xd6, 0x98, 0xe4, 0xb7, 0xca, 0xe8, 0xc0, 0xf1, 0x4d, - 0xec, 0x0d, 0xa0, 0x93, 0xeb, 0x6b, 0xa7, 0xac, 0x5f, 0x01, 0x8c, 0xd5, 0xb2, 0x14, 0xe0, 0x5b, - 0xe7, 0x5a, 0x5e, 0x77, 0x2c, 0x54, 0xb3, 0x62, 0x89, 0x3c, 0xd1, 0x32, 0x9a, 0x21, 0x8b, 0x66, - 0xf9, 0x6d, 0x5d, 0xbf, 0xc8, 0xf4, 0xa3, 0xb8, 0x58, 0x60, 0xa2, 0x64, 0xf9, 0x28, 0x7e, 0xb5, - 0xa0, 0x6e, 0x90, 0x9d, 0xda, 0x3e, 0x2d, 0xd6, 0xd3, 0xfd, 0x7b, 0x67, 0x1f, 0x56, 0xfd, 0x6c, - 0xd3, 0xe0, 0xf5, 0x32, 0xc5, 0x62, 0xfb, 0x62, 0x4a, 0x7b, 0x33, 0xe5, 0x93, 0x97, 0xe6, 0x3c, - 0x7d, 0x69, 0x2f, 0x5c, 0xd8, 0x5f, 0x77, 0x21, 0x2d, 0x70, 0x2e, 0x7e, 0xba, 0x7c, 0x7d, 0xb8, - 0x47, 0x9a, 0x60, 0x5f, 0x5d, 0x7d, 0x7f, 0x68, 0x9d, 0xfd, 0x66, 0x83, 0x73, 0x3d, 0x63, 0x73, - 0x72, 0x05, 0x8d, 0xdc, 0x0a, 0xc8, 0x47, 0x55, 0xa3, 0x6c, 0xd9, 0x5f, 0xdf, 0xfb, 0xbf, 0x92, - 0x82, 0xf2, 0xaf, 0xa1, 0x6e, 0x7c, 0x83, 0x0c, 0xaa, 0x8a, 0x1f, 0x5b, 0x4a, 0xff, 0x68, 0x94, - 0x7b, 0xf2, 0xa8, 0xf4, 0xe4, 0xd1, 0x85, 0xf6, 0x64, 0x3d, 0x53, 0xee, 0x2c, 0xd5, 0x33, 0x6d, - 0xd9, 0x50, 0xf5, 0x4c, 0x4f, 0x8c, 0xe9, 0x12, 0x1c, 0x2d, 0x0b, 0x72, 0x5c, 0xc9, 0xf6, 0xc6, - 0x90, 0xfa, 0x83, 0xdd, 0x05, 0x45, 0xab, 0xaf, 0xc0, 0x1e, 0xab, 0x25, 0x71, 0xab, 0x0a, 0x37, - 0xc2, 0xda, 0xb9, 0xda, 0x77, 0xd0, 0xc8, 0x05, 0x53, 0xbd, 0xda, 0x96, 0x98, 0xfa, 0xcf, 0x77, - 0x96, 0x7c, 0x6e, 0xbd, 0xfc, 0xe0, 0xcd, 0x83, 0xbb, 0xf7, 0xd7, 0x83, 0xbb, 0xf7, 0xef, 0x83, - 0x6b, 0xfd, 0xb2, 0x72, 0xad, 0x37, 0x2b, 0xd7, 0xfa, 0x63, 0xe5, 0x5a, 0xff, 0xac, 0x5c, 0x6b, - 0xda, 0x30, 0xf7, 0x7e, 0xf1, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8e, 0xcb, 0x80, 0x34, 0x16, - 0x07, 0x00, 0x00, + // 868 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x54, 0x4d, 0x6f, 0xeb, 0x44, + 0x14, 0xad, 0x63, 0xe7, 0xa3, 0x37, 0x1f, 0x0d, 0xa3, 0xa7, 0x6a, 0x5e, 0x80, 0x34, 0x98, 0x05, + 0xe1, 0x09, 0xa5, 0xb4, 0xb0, 0x65, 0xd1, 0xd7, 0x58, 0xbc, 0x4a, 0x0f, 0x1a, 0x4d, 0x8a, 0xf4, + 0x76, 0x91, 0x53, 0x4f, 0x9d, 0x91, 0x1c, 0x8f, 0x99, 0x19, 0xa7, 0xcd, 0x8e, 0x0d, 0xbf, 0x8b, + 0x05, 0x9b, 0xb7, 0x64, 0x85, 0x58, 0x21, 0x9a, 0x5f, 0xc0, 0x4f, 0x40, 0x33, 0x76, 0x92, 0x7e, + 0x38, 0xbc, 0xdd, 0xbd, 0xc7, 0xd7, 0x77, 0xee, 0x3d, 0x73, 0xe6, 0x00, 0xc8, 0x19, 0x9b, 0x0f, + 0x12, 0xc1, 0x15, 0x47, 0xe8, 0x9a, 0xc7, 0xca, 0x67, 0x31, 0x15, 0xc1, 0xc0, 0xc0, 0x8b, 0x93, + 0xce, 0xc7, 0x21, 0xe7, 0x61, 0x44, 0x8f, 0x4d, 0xc5, 0x34, 0xbd, 0x39, 0xa6, 0xf3, 0x44, 0x2d, + 0xb3, 0x1f, 0x3a, 0x2f, 0x42, 0x1e, 0x72, 0x13, 0x1e, 0xeb, 0x28, 0x43, 0xdd, 0x3f, 0x2d, 0x68, + 0x9e, 0x0b, 0xea, 0x2b, 0x4a, 0xe8, 0xcf, 0x29, 0x95, 0x0a, 0x1d, 0x42, 0x89, 0x05, 0xd8, 0xea, + 0x59, 0xfd, 0xfd, 0xd7, 0x95, 0xd5, 0xdf, 0x47, 0xa5, 0x8b, 0x21, 0x29, 0xb1, 0x00, 0x1d, 0x42, + 0x65, 0x9a, 0xc6, 0x41, 0x44, 0x71, 0x49, 0x7f, 0x23, 0x79, 0x86, 0x30, 0x54, 0x45, 0x1a, 0x2b, + 0x36, 0xa7, 0xd8, 0x36, 0x1f, 0xd6, 0x29, 0x7a, 0x09, 0xb5, 0x98, 0x4f, 0x12, 0xb6, 0xe0, 0x0a, + 0x3b, 0x3d, 0xab, 0x5f, 0x23, 0xd5, 0x98, 0x8f, 0x74, 0x8a, 0x3a, 0x50, 0x53, 0x54, 0xcc, 0x59, + 0xec, 0x47, 0xb8, 0x6c, 0x3e, 0x6d, 0x72, 0xf4, 0x02, 0xca, 0x52, 0x05, 0x2c, 0xc6, 0x15, 0xd3, + 0x2e, 0x4b, 0xf4, 0xf1, 0x52, 0x05, 0x3c, 0x55, 0xb8, 0x9a, 0x1d, 0x9f, 0x65, 0x39, 0x4e, 0x85, + 0xc0, 0xb5, 0x0d, 0x4e, 0x85, 0x70, 0x5d, 0x68, 0xad, 0xf7, 0x92, 0x09, 0x8f, 0x25, 0x45, 0x6d, + 0xb0, 0x93, 0x7c, 0xb3, 0x26, 0xd1, 0xa1, 0xdb, 0x82, 0xc6, 0x58, 0xf9, 0x42, 0xe5, 0xab, 0xbb, + 0x07, 0xd0, 0x1c, 0xd2, 0x88, 0x6e, 0xb8, 0x70, 0x4f, 0xa0, 0xb5, 0x06, 0xf2, 0x26, 0x47, 0x50, + 0xa7, 0x77, 0x4c, 0x4d, 0xa4, 0xf2, 0x55, 0x2a, 0xf3, 0x66, 0xa0, 0xa1, 0xb1, 0x41, 0xdc, 0xdf, + 0x6d, 0xa8, 0x7b, 0x77, 0xf4, 0xfa, 0x43, 0x74, 0x3e, 0x64, 0xa0, 0xb4, 0x8b, 0x01, 0xbb, 0x98, + 0x01, 0x67, 0x07, 0x03, 0xe5, 0x87, 0x0c, 0xa0, 0xaf, 0xc0, 0x49, 0x25, 0x15, 0x86, 0xc6, 0xfa, + 0x29, 0x1e, 0x3c, 0x17, 0xcc, 0xe0, 0x27, 0x49, 0x05, 0x31, 0x55, 0x08, 0x81, 0xe3, 0x8b, 0x50, + 0xe2, 0x6a, 0xcf, 0xee, 0xef, 0x13, 0x13, 0x6b, 0xc6, 0x68, 0xbc, 0xc0, 0x35, 0x03, 0xe9, 0x50, + 0x23, 0xd7, 0xb7, 0x01, 0xde, 0x37, 0x07, 0xe9, 0x10, 0xb9, 0xd0, 0xb8, 0xf6, 0x13, 0x7f, 0xca, + 0x22, 0xa6, 0x18, 0x95, 0x18, 0x4c, 0xf1, 0x23, 0x0c, 0x7d, 0x0b, 0x55, 0x11, 0xb1, 0x39, 0x53, + 0x12, 0xd7, 0x7b, 0x76, 0xbf, 0x7e, 0xda, 0x29, 0x1a, 0x86, 0x98, 0x12, 0xb2, 0x2e, 0x45, 0xaf, + 0xe0, 0xa3, 0x98, 0x4f, 0x62, 0x7a, 0x3b, 0x49, 0x04, 0x5b, 0xb0, 0x88, 0x86, 0x54, 0xe2, 0x86, + 0xa1, 0xea, 0x20, 0xe6, 0x3f, 0xd2, 0xdb, 0xd1, 0x06, 0x46, 0x5f, 0x42, 0xdb, 0x4f, 0x12, 0x5f, + 0xcc, 0xb9, 0x98, 0x24, 0x82, 0xdf, 0xb0, 0x88, 0xe2, 0xa6, 0x19, 0xf2, 0x60, 0x8d, 0x8f, 0x32, + 0x18, 0x7d, 0x0e, 0x4d, 0x49, 0x23, 0x16, 0xa7, 0x77, 0x93, 0xc8, 0x9f, 0xd2, 0x08, 0xb7, 0x4c, + 0x5d, 0x23, 0x07, 0xdf, 0x6a, 0xcc, 0x1d, 0x83, 0xa3, 0xb9, 0xd1, 0xfb, 0xa6, 0x5b, 0xcd, 0xa4, + 0x2c, 0xd0, 0x48, 0xc8, 0x02, 0x73, 0x65, 0x4d, 0xa2, 0x43, 0xf4, 0x05, 0x1c, 0xf8, 0x41, 0xc0, + 0x14, 0xe3, 0xb1, 0x1f, 0x4d, 0x42, 0x16, 0x48, 0x6c, 0xf7, 0xec, 0x7e, 0x93, 0xb4, 0xb6, 0xf0, + 0xf7, 0x2c, 0x90, 0xee, 0x10, 0x2a, 0xd9, 0x8e, 0x9a, 0x6c, 0xb5, 0x4c, 0x68, 0x26, 0x0b, 0x62, + 0x62, 0x8d, 0xcd, 0x7c, 0x91, 0x75, 0x76, 0x88, 0x89, 0x35, 0x26, 0xf9, 0x8d, 0x32, 0x3a, 0x70, + 0x88, 0x89, 0xdd, 0x1e, 0x34, 0x32, 0x7d, 0xed, 0x94, 0xf5, 0x5b, 0x80, 0x91, 0x5a, 0xae, 0x05, + 0xf8, 0xec, 0xbb, 0x96, 0xd7, 0x2d, 0x0b, 0xd4, 0x2c, 0x5f, 0x22, 0x4b, 0xb4, 0x8c, 0x66, 0x94, + 0x85, 0xb3, 0xec, 0xb4, 0x26, 0xc9, 0x33, 0xfd, 0x28, 0xbc, 0x05, 0x8d, 0x95, 0x5c, 0x3f, 0x8a, + 0x5f, 0x2d, 0x28, 0x1b, 0x64, 0xa7, 0xb6, 0x4f, 0xf2, 0xf5, 0x74, 0xff, 0xd6, 0xe9, 0xa7, 0x45, + 0x97, 0x6d, 0x1a, 0x5c, 0x2d, 0x13, 0x9a, 0x6f, 0x9f, 0x4f, 0x69, 0x6f, 0xa7, 0x7c, 0xf2, 0xd2, + 0x9c, 0xa7, 0x2f, 0xed, 0xd5, 0x1b, 0xd8, 0xdf, 0x74, 0x41, 0x35, 0x70, 0xbc, 0x77, 0x17, 0x57, + 0xed, 0x3d, 0x54, 0x05, 0xfb, 0xf2, 0xf2, 0x87, 0xb6, 0x85, 0xea, 0x50, 0x3d, 0x27, 0xde, 0xd9, + 0x95, 0x37, 0x6c, 0x97, 0x74, 0x32, 0xbe, 0x3a, 0x23, 0x3a, 0xb1, 0x51, 0x0b, 0xc0, 0x7b, 0xe7, + 0x9d, 0x4f, 0xce, 0x86, 0x43, 0x6f, 0xd8, 0x76, 0x4e, 0x7f, 0xb3, 0xc1, 0x19, 0xcf, 0xd8, 0x1c, + 0x5d, 0x42, 0x25, 0x33, 0x0d, 0xf4, 0x59, 0xd1, 0xd0, 0x8f, 0x8c, 0xb2, 0xe3, 0xfe, 0x5f, 0x49, + 0x7e, 0x39, 0x67, 0x50, 0x36, 0x0e, 0x83, 0x7a, 0x45, 0xc5, 0x0f, 0xcd, 0xa7, 0x73, 0x38, 0xc8, + 0xdc, 0x7b, 0xb0, 0x76, 0xef, 0x81, 0xa7, 0xdd, 0x5b, 0xcf, 0x94, 0x79, 0x50, 0xf1, 0x4c, 0x8f, + 0x0c, 0xab, 0x78, 0xa6, 0x27, 0x16, 0x76, 0x01, 0x8e, 0x16, 0x10, 0x3a, 0x2a, 0xbc, 0x97, 0xad, + 0x75, 0x75, 0x7a, 0xbb, 0x0b, 0xf2, 0x56, 0xdf, 0x81, 0x3d, 0x52, 0x4b, 0xd4, 0x2d, 0x2a, 0xdc, + 0x4a, 0x70, 0xe7, 0x6a, 0x6f, 0xa0, 0x92, 0x49, 0xab, 0x78, 0xb5, 0x47, 0xb2, 0xeb, 0xbc, 0xdc, + 0x59, 0xf2, 0xb5, 0xf5, 0xfa, 0x93, 0xf7, 0xf7, 0xdd, 0xbd, 0xbf, 0xee, 0xbb, 0x7b, 0xff, 0xde, + 0x77, 0xad, 0x5f, 0x56, 0x5d, 0xeb, 0xfd, 0xaa, 0x6b, 0xfd, 0xb1, 0xea, 0x5a, 0xff, 0xac, 0xba, + 0xd6, 0xb4, 0x62, 0xce, 0xfd, 0xe6, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x58, 0x7a, 0x4f, 0x1d, + 0x40, 0x07, 0x00, 0x00, } diff --git a/api/shim/shim.proto b/api/shim/shim.proto index 9afaeb0..5c99a25 100644 --- a/api/shim/shim.proto +++ b/api/shim/shim.proto @@ -84,6 +84,9 @@ message EventsRequest { enum EventType { EXIT = 0; OOM = 1; + CREATED = 2; + STARTED = 3; + EXEC_ADDED = 4; } message Event { diff --git a/cmd/containerd-shim/main.go b/cmd/containerd-shim/main.go index d3dc429..baac720 100644 --- a/cmd/containerd-shim/main.go +++ b/cmd/containerd-shim/main.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "os/signal" + "strings" "syscall" "google.golang.org/grpc" @@ -90,7 +91,8 @@ func serve(server *grpc.Server, path string) error { logrus.WithField("socket", path).Debug("serving api on unix socket") go func() { defer l.Close() - if err := server.Serve(l); err != nil { + if err := server.Serve(l); err != nil && + !strings.Contains(err.Error(), "use of closed network connection") { l.Close() logrus.WithError(err).Fatal("containerd-shim: GRPC server failure") } @@ -119,7 +121,7 @@ func handleSignals(signals chan os.Signal, server *grpc.Server, service *shim.Se case syscall.SIGTERM, syscall.SIGINT: // TODO: should we forward signals to the processes if they are still running? // i.e. machine reboot - server.GracefulStop() + server.Stop() return nil } } diff --git a/cmd/ctr/shim.go b/cmd/ctr/shim.go index 334f272..65b6d1e 100644 --- a/cmd/ctr/shim.go +++ b/cmd/ctr/shim.go @@ -14,6 +14,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/grpclog" + "github.com/crosbymichael/console" "github.com/docker/containerd/api/shim" "github.com/urfave/cli" ) @@ -31,6 +32,10 @@ var fifoFlags = []cli.Flag{ Name: "stderr", Usage: "specify the path to the stderr fifo", }, + cli.BoolFlag{ + Name: "tty,t", + Usage: "enable tty support", + }, } var shimCommand = cli.Command{ @@ -40,6 +45,7 @@ var shimCommand = cli.Command{ shimCreateCommand, shimStartCommand, shimDeleteCommand, + shimEventsCommand, }, Action: func(context *cli.Context) error { cmd := exec.Command("containerd-shim", "--debug") @@ -80,23 +86,43 @@ var shimCreateCommand = cli.Command{ if err != nil { return err } - wg, err := prepareStdio(context.String("stdin"), context.String("stdout"), context.String("stderr"), false) + tty := context.Bool("tty") + wg, err := prepareStdio(context.String("stdin"), context.String("stdout"), context.String("stderr"), tty) if err != nil { return err } r, err := service.Create(gocontext.Background(), &shim.CreateRequest{ - ID: id, - Bundle: context.String("bundle"), - Runtime: context.String("runtime"), - Stdin: context.String("stdin"), - Stdout: context.String("stdout"), - Stderr: context.String("stderr"), + ID: id, + Bundle: context.String("bundle"), + Runtime: context.String("runtime"), + Stdin: context.String("stdin"), + Stdout: context.String("stdout"), + Stderr: context.String("stderr"), + Terminal: tty, }) if err != nil { return err } fmt.Printf("container created with id %s and pid %d\n", id, r.Pid) if context.Bool("attach") { + if tty { + current := console.Current() + defer current.Reset() + if err := current.SetRaw(); err != nil { + return err + } + size, err := current.Size() + if err != nil { + return err + } + if _, err := service.Pty(gocontext.Background(), &shim.PtyRequest{ + Pid: r.Pid, + Width: uint32(size.Width), + Height: uint32(size.Height), + }); err != nil { + return err + } + } wg.Wait() } return nil @@ -133,6 +159,29 @@ var shimDeleteCommand = cli.Command{ }, } +var shimEventsCommand = cli.Command{ + Name: "events", + Usage: "get events for a shim", + Action: func(context *cli.Context) error { + service, err := getShimService() + if err != nil { + return err + } + events, err := service.Events(gocontext.Background(), &shim.EventsRequest{}) + if err != nil { + return err + } + for { + e, err := events.Recv() + if err != nil { + return err + } + fmt.Printf("type=%s id=%s pid=%d status=%d\n", e.Type, e.ID, e.Pid, e.ExitStatus) + } + return nil + }, +} + func getShimService() (shim.ShimClient, error) { bindSocket := "shim.sock" diff --git a/shim/exec.go b/shim/exec.go index 1579281..9492394 100644 --- a/shim/exec.go +++ b/shim/exec.go @@ -7,6 +7,7 @@ import ( "path/filepath" "sync" + "github.com/crosbymichael/console" runc "github.com/crosbymichael/go-runc" apishim "github.com/docker/containerd/api/shim" specs "github.com/opencontainers/runtime-spec/specs-go" @@ -16,7 +17,7 @@ type execProcess struct { sync.WaitGroup id string - console *runc.Console + console console.Console io runc.IO status int pid int @@ -42,6 +43,7 @@ func newExecProcess(context context.Context, r *apishim.ExecRequest, parent *ini if socket, err = runc.NewConsoleSocket(filepath.Join(cwd, "pty.sock")); err != nil { return nil, err } + defer os.Remove(socket.Path()) } else { // TODO: get uid/gid if io, err = runc.NewPipeIO(0, 0); err != nil { @@ -108,10 +110,12 @@ func (e *execProcess) Status() int { func (e *execProcess) Exited(status int) { e.status = status e.Wait() - e.io.Close() + if e.io != nil { + e.io.Close() + } } -func (e *execProcess) Resize(ws runc.WinSize) error { +func (e *execProcess) Resize(ws console.WinSize) error { if e.console == nil { return nil } diff --git a/shim/init.go b/shim/init.go index 64db96d..d01ae01 100644 --- a/shim/init.go +++ b/shim/init.go @@ -7,6 +7,7 @@ import ( "sync" "syscall" + "github.com/crosbymichael/console" runc "github.com/crosbymichael/go-runc" apishim "github.com/docker/containerd/api/shim" ) @@ -16,7 +17,7 @@ type initProcess struct { id string bundle string - console *runc.Console + console console.Console io runc.IO runc *runc.Runc status int @@ -47,6 +48,7 @@ func newInitProcess(context context.Context, r *apishim.CreateRequest) (*initPro if socket, err = runc.NewConsoleSocket(filepath.Join(cwd, "pty.sock")); err != nil { return nil, err } + defer os.Remove(socket.Path()) } else { // TODO: get uid/gid if io, err = runc.NewPipeIO(0, 0); err != nil { @@ -105,11 +107,13 @@ func (p *initProcess) Delete(context context.Context) error { p.killAll(context) p.Wait() err := p.runc.Delete(context, p.id) - p.io.Close() + if p.io != nil { + p.io.Close() + } return err } -func (p *initProcess) Resize(ws runc.WinSize) error { +func (p *initProcess) Resize(ws console.WinSize) error { if p.console == nil { return nil } diff --git a/shim/io.go b/shim/io.go index 7947efe..8fbd647 100644 --- a/shim/io.go +++ b/shim/io.go @@ -7,11 +7,12 @@ import ( "sync" "syscall" + "github.com/crosbymichael/console" runc "github.com/crosbymichael/go-runc" "github.com/tonistiigi/fifo" ) -func copyConsole(ctx context.Context, console *runc.Console, stdin, stdout, stderr string, wg *sync.WaitGroup) error { +func copyConsole(ctx context.Context, console console.Console, stdin, stdout, stderr string, wg *sync.WaitGroup) error { in, err := fifo.OpenFifo(ctx, stdin, syscall.O_RDONLY, 0) if err != nil { return err diff --git a/shim/process.go b/shim/process.go index 90430ee..1376ca6 100644 --- a/shim/process.go +++ b/shim/process.go @@ -1,12 +1,12 @@ package shim -import runc "github.com/crosbymichael/go-runc" +import "github.com/crosbymichael/console" type process interface { // Pid returns the pid for the process Pid() int // Resize resizes the process console - Resize(ws runc.WinSize) error + Resize(ws console.WinSize) error // Exited sets the exit status for the process Exited(status int) // Status returns the exit status diff --git a/shim/service.go b/shim/service.go index e53a618..c0e4d4b 100644 --- a/shim/service.go +++ b/shim/service.go @@ -4,7 +4,7 @@ import ( "fmt" "sync" - runc "github.com/crosbymichael/go-runc" + "github.com/crosbymichael/console" apishim "github.com/docker/containerd/api/shim" "github.com/docker/containerd/utils" google_protobuf "github.com/golang/protobuf/ptypes/empty" @@ -17,7 +17,7 @@ var emptyResponse = &google_protobuf.Empty{} func NewService() *Service { return &Service{ processes: make(map[int]process), - events: make(chan *apishim.Event, 2048), + events: make(chan *apishim.Event, 4096), } } @@ -40,6 +40,11 @@ func (s *Service) Create(ctx context.Context, r *apishim.CreateRequest) (*apishi s.processes[pid] = process s.id = r.ID s.mu.Unlock() + s.events <- &apishim.Event{ + Type: apishim.EventType_CREATED, + ID: r.ID, + Pid: uint32(pid), + } return &apishim.CreateResponse{ Pid: uint32(pid), }, nil @@ -49,6 +54,11 @@ func (s *Service) Start(ctx context.Context, r *apishim.StartRequest) (*google_p if err := s.initProcess.Start(ctx); err != nil { return nil, err } + s.events <- &apishim.Event{ + Type: apishim.EventType_STARTED, + ID: s.id, + Pid: uint32(s.initProcess.Pid()), + } return emptyResponse, nil } @@ -73,13 +83,21 @@ func (s *Service) Exec(ctx context.Context, r *apishim.ExecRequest) (*apishim.Ex } pid := process.Pid() s.processes[pid] = process + s.events <- &apishim.Event{ + Type: apishim.EventType_EXEC_ADDED, + ID: s.id, + Pid: uint32(pid), + } return &apishim.ExecResponse{ Pid: uint32(pid), }, nil } func (s *Service) Pty(ctx context.Context, r *apishim.PtyRequest) (*google_protobuf.Empty, error) { - ws := runc.WinSize{ + if r.Pid == 0 { + return nil, fmt.Errorf("pid not provided in request") + } + ws := console.WinSize{ Width: uint16(r.Width), Height: uint16(r.Height), }