diff --git a/depends/jacobsa/daemonize/LICENSE b/depends/jacobsa/daemonize/LICENSE deleted file mode 100644 index 8f71f43fe..000000000 --- a/depends/jacobsa/daemonize/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - 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. - diff --git a/depends/jacobsa/daemonize/daemonize.go b/depends/jacobsa/daemonize/daemonize.go deleted file mode 100644 index ed031ecb1..000000000 --- a/depends/jacobsa/daemonize/daemonize.go +++ /dev/null @@ -1,274 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// 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. - -// Helper code for starting a daemon process. -// -// This package assumes that the user invokes a tool, which invokes a daemon -// process. Though the tool starts the daemon process with stdin, stdout, and -// stderr closed (using Run), the daemon should be able to communicate status -// to the user while it starts up (using StatusWriter), causing the tool to -// exit in success or failure only when it is clear whether the daemon has -// sucessfully started (which it signal using SignalOutcome). -package daemonize - -import ( - "encoding/gob" - "fmt" - "io" - "io/ioutil" - "log" - "os" - "os/exec" - "strconv" - "syscall" -) - -// The name of an environment variable used to communicate a file descriptor -// set up by Run to the daemon process. Gob encoding is used to communicate -// back to Run. -const envVar = "DAEMONIZE_STATUS_FD" - -// A message containing logging output while starting the daemon. -type logMsg struct { - Msg []byte -} - -// A message indicating the outcome of starting the daemon. The receiver -// ignores further messages. -type outcomeMsg struct { - Successful bool - - // Meaningful only if !Successful. - ErrorMsg string -} - -func init() { - gob.Register(logMsg{}) - gob.Register(outcomeMsg{}) -} - -// The file provded to this process via the environment variable, or nil if -// none. -var gFile *os.File - -// A gob encoder that writes into gFile, or nil. -var gGobEncoder *gob.Encoder - -func init() { - // Is the environment variable set? - fdStr, ok := os.LookupEnv(envVar) - if !ok { - return - } - - // Parse the file descriptor. - fd, err := strconv.ParseUint(fdStr, 10, 32) - if err != nil { - log.Fatalf("Couldn't parse %s value %q: %v", envVar, fdStr, err) - } - - // Set up the file and the encoder that wraps it. - gFile = os.NewFile(uintptr(fd), envVar) - gGobEncoder = gob.NewEncoder(gFile) -} - -// Send the supplied message as an interface{}, matching the decoder. -func sendMsg(msg interface{}) (err error) { - err = gGobEncoder.Encode(&msg) - return -} - -// For use by the daemon: signal an outcome back to Run in the invoking tool, -// causing it to return. Do nothing if the process wasn't invoked with Run. -func SignalOutcome(outcome error) (err error) { - // Is there anything to do? - if gGobEncoder == nil { - return - } - - // Write out the outcome. - msg := &outcomeMsg{ - Successful: outcome == nil, - } - - if !msg.Successful { - msg.ErrorMsg = outcome.Error() - } - - err = sendMsg(msg) - - return -} - -// An io.Writer that sends logMsg messages over gGobEncoder. -type logMsgWriter struct { -} - -func (w *logMsgWriter) Write(p []byte) (n int, err error) { - msg := &logMsg{ - Msg: p, - } - - err = sendMsg(msg) - if err != nil { - return - } - - n = len(p) - return -} - -// For use by the daemon: the writer that should be used for logging status -// messages while in the process of starting up. The writer must not be written -// to after calling SignalOutcome. -// -// Set to a reasonable default if the process wasn't invoked by a call to Run. -var StatusWriter io.Writer - -func init() { - if gGobEncoder != nil { - StatusWriter = &logMsgWriter{} - } else { - StatusWriter = os.Stderr - } -} - -// Invoke the daemon with the supplied arguments, waiting until it successfully -// starts up or reports that is has failed. Write status updates while starting -// into the supplied writer (which may be nil for silence). Return nil only if -// it starts successfully. -func Run( - path string, - args []string, - env []string, - status io.Writer) (err error) { - if status == nil { - status = ioutil.Discard - } - - // Set up the pipe that we will hand to the daemon. - pipeR, pipeW, err := os.Pipe() - if err != nil { - err = fmt.Errorf("Pipe: %v", err) - return - } - - // Attempt to start the daemon process. If we encounter an error in so doing, - // write it to the channel. - startProcessErr := make(chan error, 1) - go func() { - defer pipeW.Close() - err := startProcess(path, args, env, pipeW) - if err != nil { - startProcessErr <- err - } - }() - - // Read communication from the daemon from the pipe, writing nil into the - // channel only if the startup succeeds. - readFromProcessOutcome := make(chan error, 1) - go func() { - defer pipeR.Close() - readFromProcessOutcome <- readFromProcess(pipeR, status) - }() - - // Wait for a result from one of the above. - select { - case err = <-startProcessErr: - err = fmt.Errorf("startProcess: %v", err) - return - - case err = <-readFromProcessOutcome: - if err == nil { - // All is good. - return - } - - err = fmt.Errorf("readFromProcess: %v", err) - return - } -} - -// Start the daemon process, handing it the supplied pipe for communication. Do -// not wait for it to return. -func startProcess( - path string, - args []string, - env []string, - pipeW *os.File) (err error) { - cmd := exec.Command(path) - cmd.Args = append(cmd.Args, args...) - cmd.Env = append(cmd.Env, env...) - cmd.ExtraFiles = []*os.File{pipeW} - - // Change working directories so that we don't prevent unmounting of the - // volume of our current working directory. - cmd.Dir = "/" - - // Call setsid after forking in order to avoid being killed when the user - // logs out. - cmd.SysProcAttr = &syscall.SysProcAttr{ - Setsid: true, - } - - // Send along the write end of the pipe. - cmd.Env = append(cmd.Env, fmt.Sprintf("%s=3", envVar)) - - // Start. Clean up in the background, ignoring errors. - err = cmd.Start() - go cmd.Wait() - - return -} - -// Process communication from a daemon subprocess. Write log messages to the -// supplied writer (which must be non-nil). Return nil only if the startup -// succeeds. -func readFromProcess( - r io.Reader, - status io.Writer) (err error) { - decoder := gob.NewDecoder(r) - - for { - // Read a message. - var msg interface{} - err = decoder.Decode(&msg) - if err != nil { - err = fmt.Errorf("Decode: %v", err) - return - } - - // Handle the message. - switch msg := msg.(type) { - case logMsg: - _, err = status.Write(msg.Msg) - if err != nil { - err = fmt.Errorf("status.Write: %v", err) - return - } - - case outcomeMsg: - if msg.Successful { - return - } - - err = fmt.Errorf("sub-process: %s", msg.ErrorMsg) - return - - default: - err = fmt.Errorf("Unhandled message type: %T", msg) - return - } - } -} diff --git a/depends/jacobsa/daemonize/go.mod b/depends/jacobsa/daemonize/go.mod deleted file mode 100644 index 7d21fb44f..000000000 --- a/depends/jacobsa/daemonize/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/jacobsa/daemonize - -go 1.16 diff --git a/go.mod b/go.mod index aa98d1dac..f07672048 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,6 @@ module github.com/cubefs/cubefs go 1.17 replace ( - github.com/jacobsa/daemonize => ./depends/jacobsa/daemonize github.com/jacobsa/fuse => ./depends/jacobsa/fuse github.com/spf13/cobra => ./depends/spf13/cobra ) @@ -27,7 +26,7 @@ require ( github.com/gorilla/mux v1.8.0 github.com/hashicorp/consul/api v1.15.2 github.com/hashicorp/golang-lru v0.5.4 - github.com/jacobsa/daemonize v0.0.0-00010101000000-000000000000 + github.com/jacobsa/daemonize v0.0.0-20160101105449-e460293e890f github.com/julienschmidt/httprouter v1.3.0 github.com/klauspost/reedsolomon v1.11.7 github.com/opentracing/opentracing-go v1.2.0 diff --git a/go.sum b/go.sum index db2c547c3..7f4ba072e 100644 --- a/go.sum +++ b/go.sum @@ -318,6 +318,8 @@ github.com/hinshun/vt10x v0.0.0-20180809195222-d55458df857c/go.mod h1:DqJ97dSdRW github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jacobsa/daemonize v0.0.0-20160101105449-e460293e890f h1:X+tnaqoCcBgAwSTJtoYW6p0qKiuPyMfofEHEFUf2kdU= +github.com/jacobsa/daemonize v0.0.0-20160101105449-e460293e890f/go.mod h1:Ip4fOwzCrnDVuluHBd7FXIMb7SHOKfkt9/UDrYSZvqI= github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= diff --git a/vendor/github.com/jacobsa/daemonize/.gitignore b/vendor/github.com/jacobsa/daemonize/.gitignore new file mode 100644 index 000000000..daf913b1b --- /dev/null +++ b/vendor/github.com/jacobsa/daemonize/.gitignore @@ -0,0 +1,24 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof diff --git a/vendor/github.com/spf13/cobra/command_notwin.go b/vendor/github.com/spf13/cobra/command_notwin.go index 6159c1cc1..bb5dad90b 100644 --- a/vendor/github.com/spf13/cobra/command_notwin.go +++ b/vendor/github.com/spf13/cobra/command_notwin.go @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows package cobra diff --git a/vendor/github.com/spf13/cobra/command_win.go b/vendor/github.com/spf13/cobra/command_win.go index 8768b1736..a84f5a82a 100644 --- a/vendor/github.com/spf13/cobra/command_win.go +++ b/vendor/github.com/spf13/cobra/command_win.go @@ -1,3 +1,4 @@ +//go:build windows // +build windows package cobra diff --git a/vendor/modules.txt b/vendor/modules.txt index 62f78725d..1340fd8da 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -199,8 +199,8 @@ github.com/hashicorp/serf/coordinate # github.com/inconshreveable/mousetrap v1.0.0 ## explicit github.com/inconshreveable/mousetrap -# github.com/jacobsa/daemonize v0.0.0-00010101000000-000000000000 => ./depends/jacobsa/daemonize -## explicit; go 1.16 +# github.com/jacobsa/daemonize v0.0.0-20160101105449-e460293e890f +## explicit github.com/jacobsa/daemonize # github.com/jcmturner/aescts/v2 v2.0.0 ## explicit; go 1.13 @@ -501,6 +501,5 @@ gopkg.in/yaml.v2 # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 -# github.com/jacobsa/daemonize => ./depends/jacobsa/daemonize # github.com/jacobsa/fuse => ./depends/jacobsa/fuse # github.com/spf13/cobra => ./depends/spf13/cobra