Merge pull request #2050 from justincormack/vendor-remove-cpio

Removed unused vendoring
This commit is contained in:
Justin Cormack 2017-06-15 15:18:30 -07:00 committed by GitHub
commit e69a36b4c0
9 changed files with 0 additions and 1077 deletions

View File

@ -6,7 +6,6 @@ github.com/Sirupsen/logrus 10f801ebc38b33738c9d17d50860f484a0988ff5
github.com/aws/aws-sdk-go fa107560b5f3528a859a1a1511086646731bb1a8
github.com/dgrijalva/jwt-go 6c8dedd55f8a2e41f605de6d5d66e51ed1f299fc
github.com/docker/docker 8d96619e5a367798cffcb740cfc41e0a505a5232
github.com/docker/infrakit cb420e3e50ea60afe58538b1d3cab1cb14059433
github.com/go-ini/ini afbc45e87f3ba324c532d12c71918ef52e0fb194
github.com/golang/protobuf c9c7427a2a70d2eb3bafa0ab2dc163e45f143317
github.com/googleapis/gax-go 8c5154c0fe5bf18cf649634d4c6df50897a32751
@ -17,7 +16,6 @@ github.com/packethost/packngo 91d54000aa56874149d348a884ba083c41d38091
github.com/radu-matei/azure-sdk-for-go 3b12823551999669c9a325a32472508e0af7978e
github.com/radu-matei/azure-vhd-utils e52754d5569d2a643a7775f72ff2a6cf524f4c25
github.com/rn/iso9660wrap 4606f848a055435cdef85305960b0e1bb788d506
github.com/surma/gocpio fcb68777e7dc4ea43ffce871b552c0d073c17495
github.com/vmware/govmomi 6f8ebd89d521d9f9af7a6c2219c4deee511020dd
golang.org/x/crypto 573951cbe80bb6352881271bb276f48749eab6f4
golang.org/x/net a6577fac2d73be281a500b310739095313165611

View File

@ -1,201 +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 2016 Docker, Inc.
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.

View File

@ -1,235 +0,0 @@
InfraKit
========
[![Circle CI](https://circleci.com/gh/docker/infrakit.png?style=shield&circle-token=50d2063f283f98b7d94746416c979af3102275b5)](https://circleci.com/gh/docker/infrakit)
[![Go Report Card](https://goreportcard.com/badge/github.com/docker/infrakit)](https://goreportcard.com/report/github.com/docker/infrakit)
[![codecov.io](https://codecov.io/github/docker/infrakit/coverage.svg?branch=master&token=z08ZKeIJfA)](https://codecov.io/github/docker/infrakit?branch=master)
_InfraKit_ is a toolkit for creating and managing declarative, self-healing infrastructure.
It breaks infrastructure automation down into simple, pluggable components. These components work together to actively
ensure the infrastructure state matches the user's specifications.
Although _InfraKit_ emphasizes primitives for building self-healing infrastructure, it also can be used passively like
conventional tools.
To get started, try the [tutorial](docs/tutorial.md).
### Who InfraKit is for
_InfraKit_ is designed to support setup and management of base infrastructure. For example, it can help you manage a
system like a cluster or container orchestrator, ideally relieving you of building custom release and maintenance tools.
As a result, it is a low-level tool intended to be used by infrastructure operators directly or indirectly
(as a toolkit) through a higher-level tool. Since _InfraKit_ is pluggable, it allows you to manage resources in diverse
environments while using shared components and consistent interfaces.
## Plugins
_InfraKit_ makes extensive use of _Plugins_ to manage arbitrary systems in diverse environments, which can be composed
to meet different needs.
See the [plugins](docs/plugins) documentation for more details.
## Building
### Your Environment
Make sure you check out the project following a convention for building Go projects. For example,
```shell
# Install Go - https://golang.org/dl/
# Assuming your go compiler is in /usr/local/go
export PATH=/usr/local/go/bin:$PATH
# Your dev environment
mkdir -p ~/go
export GOPATH=!$
export PATH=$GOPATH/bin:$PATH
mkdir -p ~/go/src/github.com/docker
cd !$
git clone git@github.com:docker/infrakit.git
cd infrakit
```
We recommended go version 1.7.1 or greater for all platforms.
Also install a few build tools:
```shell
make get-tools
```
### Running tests
```shell
$ make ci
```
### Binaries
```shell
$ make binaries
```
Executables will be placed in the `./build` directory.
This will produce binaries for tools and several reference Plugin implementations:
+ [`infrakit`](cmd/cli/README.md): a command line interface to interact with plugins
+ [`infrakit-group-default`](cmd/group/README.md): the default [Group plugin](./pkg/spi/group)
+ [`infrakit-instance-file`](examples/instance/file): an Instance plugin using dummy files to represent instances
+ [`infrakit-instance-terraform`](examples/instance/terraform):
an Instance plugin integrating [Terraform](https://www.terraform.io)
+ [`infrakit-instance-vagrant`](examples/instance/vagrant):
an Instance plugin using [Vagrant](https://www.vagrantup.com/)
+ [`infrakit-instance-maas`](examples/instance/maas):
an Instance plugin using [MaaS](https://maas.io)
+ [`infrakit-flavor-vanilla`](examples/flavor/vanilla):
a Flavor plugin for plain vanilla set up with user data and labels
+ [`infrakit-flavor-zookeeper`](examples/flavor/zookeeper):
a Flavor plugin for [Apache ZooKeeper](https://zookeeper.apache.org/) ensemble members
+ [`infrakit-flavor-swarm`](examples/flavor/swarm):
a Flavor plugin for Docker in [Swarm mode](https://docs.docker.com/engine/swarm/).
All provided binaries have a `help` sub-command to get usage and a `version` sub-command to identify the build revision.
# Design
## Configuration
_InfraKit_ uses JSON for configuration because it is composable and a widely accepted format for many
infrastructure SDKs and tools. Since the system is highly component-driven, our JSON format follows
simple patterns to support the composition of components.
A common pattern for a JSON object looks like this:
```json
{
"SomeKey": "ValueForTheKey",
"Properties": {
}
}
```
There is only one `Properties` field in this JSON and its value is a JSON object. The opaque
JSON value for `Properties` is decoded via the Go `Spec` struct defined within the package of the plugin --
for example -- [`vanilla.Spec`](pkg/plugin/flavor/vanilla/flavor.go).
The JSON above is a _value_, but the type of the value belongs outside the structure. For example, the
default Group [Spec](pkg/plugin/group/types/types.go) is composed of an Instance plugin, a Flavor plugin, and an
Allocation:
```json
{
"ID": "name-of-the-group",
"Properties": {
"Allocation": {
},
"Instance": {
"Plugin": "name-of-the-instance-plugin",
"Properties": {
}
},
"Flavor": {
"Plugin": "name-of-the-flavor-plugin",
"Properties": {
}
}
}
}
```
The group's Spec has `Instance` and `Flavor` fields which are used to indicate the type, and the value of the
fields follow the pattern of `<some_key>` and `Properties` as shown above.
The `Allocation` determines how the Group is managed. Allocation has two properties:
- `Size`: an integer for the number of instances to maintain in the Group
- `LogicalIDs`: a list of string identifiers, one will be associated with each Instance
Exactly one of these fields must be set, which defines whether the Group is treated as 'cattle' (`Size`) or 'pets'
(`LogicalIDs`). It is up to the Instance and Flavor plugins to determine how to use `LogicalID` values.
As an example, if you wanted to manage a Group of NGINX servers, you could
write a custom Group plugin for ultimate customization. The most concise configuration looks something like this:
```json
{
"ID": "nginx",
"Plugin": "my-nginx-group-plugin",
"Properties": {
"port": 8080
}
}
````
However, you would likely prefer to use the default Group plugin and implement a Flavor plugin to focus on
application-specific behavior. This gives you immediate support for any infrastructure that has an Instance plugin.
Your resulting configuration might look something like this:
```json
{
"ID": "nginx",
"Plugin": "group",
"Properties": {
"Allocation": {
"Size": 10
},
"Instance": {
"Plugin": "aws",
"Properties": {
"region": "us-west-2",
"ami": "ami-123456"
}
},
"Flavor": {
"Plugin": "nginx",
"Properties": {
"port": 8080
}
}
}
}
```
Once the configuration is ready, you will tell a Group plugin to
+ watch it
+ update it
+ destroy it
Watching the group as specified in the configuration means that the Group plugin will create
the instances if they don't already exist. New instances will be created if for any reason
existing instances have disappeared such that the state doesn't match your specifications.
Updating the group tells the Group plugin that your configuration may have changed. It will
then determine the changes necessary to ensure the state of the infrastructure matches the new
specification.
## Docs
Additional documentation can be found [here](docs).
## Reporting security issues
The maintainers take security seriously. If you discover a security issue,
please bring it to their attention right away!
Please **DO NOT** file a public issue, instead send your report privately to
[security@docker.com](mailto:security@docker.com).
Security reports are greatly appreciated and we will publicly thank you for it.
We also like to send gifts—if you're into Docker schwag, make sure to let
us know. We currently do not offer a paid security bounty program, but are not
ruling it out in the future.
## Design goals
_InfraKit_ is currently focused on supporting setup and management of base infrastructure, such as a cluster
orchestrator. The image below illustrates an architecture we are working towards supporting - a Docker cluster in Swarm
mode.
![arch image](docs/images/arch.png)
This configuration co-locates _InfraKit_ with Swarm manager nodes and offers high availability of _InfraKit_ itself and
Swarm managers (using attached storage). _InfraKit_ is shown managing two groups - managers and workers that will be
continuously monitored, and may be modified with rolling updates.
Countless configurations are possible with _InfraKit_, but we believe achieving support for this configuration will
enable a large number of real-world use cases.
## Copyright and license
Copyright © 2016 Docker, Inc. All rights reserved. Released under the Apache 2.0
license. See [LICENSE](LICENSE) for the full license text.

View File

@ -1,81 +0,0 @@
# Vendor configuration for trash (https://github.com/rancher/trash)
# Install trash with `go get github.com/rancher/trash`
# Synchronize the vendor/ directory with `vendor.conf` by running `trash`.
# Update dependencies by running `trash -u`.
# package
github.com/docker/infrakit
github.com/Masterminds/sprig 2.8.0
github.com/Microsoft/go-winio 0.3.6
github.com/Sirupsen/logrus v0.11.0-5-gabc6f20
github.com/aokoli/goutils 1.0.0
github.com/armon/go-radix 4239b77
github.com/beorn7/perks 4c0e845
github.com/beorn7/perks/quantile 4c0e845
github.com/coreos/etcd/auth/authpb v3.1.3
github.com/coreos/etcd/clientv3 v3.1.3
github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes v3.1.3
github.com/coreos/etcd/etcdserver/etcdserverpb v3.1.3
github.com/coreos/etcd/mvcc/mvccpb v3.1.3
github.com/coreos/etcd/pkg/tlsutil v3.1.3
github.com/davecgh/go-spew v1.0.0-9-g346938d
github.com/docker/distribution v2.6.0-rc.1-4-g7694c31
github.com/docker/docker 3a68292
github.com/docker/go-connections v0.2.1-10-gf512407
github.com/docker/go-units v0.3.1-8-g8a7beac
github.com/ghodss/yaml 73d445a93680fa1a78ae23a5839bad48f32ba1ee
github.com/golang/glog 23def4e
github.com/golang/mock bd3c8e8
github.com/golang/protobuf/jsonpb 4bd1920723d7b7c925de087aa32e2187708897f7
github.com/golang/protobuf/proto 4bd1920723d7b7c925de087aa32e2187708897f7
github.com/gorilla/handlers v1.1-12-ge1b2144
github.com/gorilla/mux 757bef9
github.com/gorilla/rpc 22c016f
github.com/grpc-ecosystem/go-grpc-prometheus v1.1
github.com/grpc-ecosystem/grpc-gateway/runtime 84398b94e188ee336f307779b57b3aa91af7063c
github.com/grpc-ecosystem/grpc-gateway/utilities 84398b94e188ee336f307779b57b3aa91af7063c
github.com/inconshreveable/mousetrap 76626ae
github.com/jmespath/go-jmespath 0.2.2-14-gbd40a43
github.com/juju/ansiterm 35c59b9
github.com/juju/errors 6f54ff6
github.com/juju/gomaasapi 31d8415
github.com/juju/loggo 3b7ece4
github.com/juju/schema e4e0580
github.com/juju/utils 8f0eda3
github.com/juju/version 1f41e27
github.com/lunixbochs/vtclean 4fbf763
github.com/mattn/go-colorable d228849
github.com/mattn/go-isatty 30a891c
github.com/matttproud/golang_protobuf_extensions v1.0.0
github.com/nightlyone/lockfile 1d49c98
github.com/opencontainers/runc v1.0.0-rc2-137-g43c4300
github.com/pkg/errors v0.8.0-2-g248dadf
github.com/pmezard/go-difflib v1.0.0
github.com/prometheus/client_golang/prometheus v0.8.0
github.com/prometheus/client_model 6f38060
github.com/prometheus/common 49fee29
github.com/prometheus/procfs a1dba9c
github.com/satori/go.uuid v1.1.0
github.com/spf13/afero 06b7e5f
github.com/spf13/cobra 6e91dde
github.com/spf13/pflag 5ccb023
github.com/stretchr/testify v1.1.4-4-g976c720
github.com/twmb/algoimpl 716f8e7
github.com/vaughan0/go-ini a98ad7e
golang.org/x/crypto/pbkdf2 b07d8c9
golang.org/x/net 0dd7c8d
golang.org/x/sys b699b70
golang.org/x/text a263ba8
google.golang.org/grpc v1.0.4
google.golang.org/grpc/codes v1.0.4
google.golang.org/grpc/credentials v1.0.4
google.golang.org/grpc/grpclog v1.0.4
google.golang.org/grpc/metadata v1.0.4
gopkg.in/inconshreveable/log15.v2 v2.11
gopkg.in/juju/names.v2 0847c26
gopkg.in/mgo.v2/bson 3f83fa5
gopkg.in/mgo.v2/internal 3f83fa5
gopkg.in/tylerb/graceful.v1 v1.2.13
gopkg.in/yaml.v2 a5b47d3

View File

@ -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 2016 Surma
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.

View File

@ -1,11 +0,0 @@
`gocpio` is a simple library similar to Gos `tar` or `zip` package for
accessing cpio archives. Its not pretty and only implements the new ASCII
format. Maybe Ill refactor and implement other formats some day.
Links
-----
* [Reference](http://people.freebsd.org/~kientzle/libarchive/man/cpio.5.txt)
-------
Version 1.1.0

View File

@ -1,46 +0,0 @@
// Package cpio implements access to cpio archives.
// Implementation of the new ASCII formate (SVR4) defined here:
// http://people.freebsd.org/~kientzle/libarchive/man/cpio.5.txt
package cpio
const (
VERSION = "1.1.0"
)
// Header represents file meta data in an archive.
// Some fields may not be populated.
type Header struct {
Mode int64 // permission and mode bits.
Uid int // user id of owner.
Gid int // group id of owner.
Mtime int64 // modified time; seconds since epoch.
Size int64 // length in bytes.
Devmajor int64 // major number of character or block device.
Devminor int64 // minor number of character or block device.
Type int64
Name string // name of header file entry.
}
func (h *Header) IsTrailer() bool {
return h.Name == trailer.Name &&
h.Uid == trailer.Uid &&
h.Gid == trailer.Gid &&
h.Mtime == trailer.Mtime
}
// File types
const (
TYPE_SOCK = 014
TYPE_SYMLINK = 012
TYPE_REG = 010
TYPE_BLK = 006
TYPE_DIR = 004
TYPE_CHAR = 002
TYPE_FIFO = 001
)
var (
trailer = Header{
Name: "TRAILER!!!",
}
)

View File

@ -1,181 +0,0 @@
package cpio
import (
"errors"
"io"
"strconv"
)
type Reader struct {
r io.Reader
pos int64
remaining_bytes int
}
func NewReader(r io.Reader) *Reader {
return &Reader{
r: r,
}
}
func disassemble(mode int64) (fmode int64, ftype int64) {
fmode = mode & 0xFFF
ftype = (mode >> 12) & 0xF
return
}
func getPrefix(buf *[]byte, len int) (pre []byte) {
pre, *buf = (*buf)[0:len], (*buf)[len:]
return
}
func Btoi(s string, base int) (int, error) {
i, e := strconv.ParseInt(s, base, 64)
return int(i), e
}
var (
ErrInvalidHeader = errors.New("Did not find valid magic number")
)
func parseHeader(buf []byte) (*Header, int64, error) {
magic := string(getPrefix(&buf, 6))
raw_inode := getPrefix(&buf, 8)
raw_mode := getPrefix(&buf, 8)
raw_uid := getPrefix(&buf, 8)
raw_gid := getPrefix(&buf, 8)
raw_nlinks := getPrefix(&buf, 8)
raw_mtime := getPrefix(&buf, 8)
raw_size := getPrefix(&buf, 8)
raw_major := getPrefix(&buf, 8)
raw_minor := getPrefix(&buf, 8)
raw_devmajor := getPrefix(&buf, 8)
raw_devminor := getPrefix(&buf, 8)
raw_namelen := getPrefix(&buf, 8)
raw_check := getPrefix(&buf, 8)
_, _, _, _, _ = raw_inode, raw_nlinks, raw_major, raw_minor, raw_check
if magic != "070701" {
return nil, 0, ErrInvalidHeader
}
hdr := &Header{}
mode, e := strconv.ParseInt(string(raw_mode), 16, 64)
if e != nil {
return nil, 0, e
}
hdr.Mode, hdr.Type = disassemble(mode)
hdr.Uid, e = Btoi(string(raw_uid), 16)
if e != nil {
return nil, 0, e
}
hdr.Gid, e = Btoi(string(raw_gid), 16)
if e != nil {
return nil, 0, e
}
hdr.Mtime, e = strconv.ParseInt(string(raw_mtime), 16, 64)
if e != nil {
return nil, 0, e
}
hdr.Size, e = strconv.ParseInt(string(raw_size), 16, 64)
if e != nil {
return nil, 0, e
}
hdr.Devmajor, e = strconv.ParseInt(string(raw_devmajor), 16, 64)
if e != nil {
return nil, 0, e
}
hdr.Devminor, e = strconv.ParseInt(string(raw_devminor), 16, 64)
if e != nil {
return nil, 0, e
}
namelen, e := strconv.ParseInt(string(raw_namelen), 16, 64)
if e != nil {
return nil, 0, e
}
return hdr, namelen, nil
}
func (r *Reader) Next() (*Header, error) {
e := r.skipRest()
if e != nil {
return nil, e
}
e = r.skipPadding(4)
if e != nil {
return nil, e
}
raw_hdr := make([]byte, 110)
_, e = r.countedRead(raw_hdr)
if e != nil {
return nil, e
}
hdr, namelen, e := parseHeader(raw_hdr)
if e != nil {
return nil, e
}
bname := make([]byte, namelen)
_, e = r.countedRead(bname)
if e != nil {
return nil, e
}
hdr.Name = string(bname[0 : namelen-1]) //Exclude terminating zero
r.remaining_bytes = int(hdr.Size)
return hdr, r.skipPadding(4)
}
func (r *Reader) skipRest() error {
buf := make([]byte, 1)
for ; r.remaining_bytes > 0; r.remaining_bytes-- {
_, e := r.countedRead(buf)
if e != nil {
return e
}
}
return nil
}
// Skips to the next position which is a multiple of mod.
func (r *Reader) skipPadding(mod int64) error {
numBytesToRead := ((mod - (r.pos % mod)) % mod)
buf := make([]byte, numBytesToRead)
_, e := r.countedRead(buf)
return e
}
func (r *Reader) Read(b []byte) (n int, e error) {
if r.remaining_bytes == 0 {
return 0, io.EOF
}
if len(b) > r.remaining_bytes {
b = b[0:r.remaining_bytes]
}
n, e = r.countedRead(b)
r.remaining_bytes -= n
return
}
func (r *Reader) countedRead(b []byte) (n int, e error) {
if len(b) == 0 {
return
}
n, e = r.r.Read(b)
r.pos += int64(n)
return
}

View File

@ -1,118 +0,0 @@
package cpio
import (
"io"
"fmt"
)
// A writer enables sequential writing of cpio archives.
// A call to WriteHeader begins a new file. Every call to
// write afterwards appends to that file, writing at most
// hdr.Size bytes in total.
type Writer struct {
w io.Writer
inode int64
length int64
remaining_bytes int
}
func NewWriter(w io.Writer) *Writer {
return &Writer{
w: w,
inode: 721,
}
}
func assemble(mode, typev int64) int64 {
return mode&0xFFF | ((typev & 0xF) << 12)
}
func (w *Writer) WriteHeader(hdr *Header) error {
// Bring last file to the defined length
e := w.zeros(int64(w.remaining_bytes))
if e != nil {
return e
}
e = w.pad(4)
if e != nil {
return e
}
bname := []byte(hdr.Name)
nlinks := 1
if hdr.Type == TYPE_DIR {
nlinks = 2
}
shdr := fmt.Sprintf("%s%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x",
"070701",
w.inode,
assemble(hdr.Mode, hdr.Type),
hdr.Uid,
hdr.Gid,
nlinks,
hdr.Mtime,
hdr.Size,
3, // major
1, // minor
hdr.Devmajor,
hdr.Devminor,
len(bname)+1, // +1 for terminating zero
0) // check
_, e = w.countedWrite([]byte(shdr))
if e != nil {
return e
}
_, e = w.countedWrite(bname)
if e != nil {
return e
}
_, e = w.countedWrite([]byte{0})
if e != nil {
return e
}
w.inode++
w.remaining_bytes = int(hdr.Size)
return w.pad(4)
}
func (w *Writer) zeros(num int64) error {
for ; num > 0; num-- {
_, e := w.countedWrite([]byte{0})
if e != nil {
return e
}
}
return nil
}
// Brings the length of the file to a multiple of mod
func (w *Writer) pad(mod int64) error {
return w.zeros((mod - (w.length % mod)) % mod)
}
func (w *Writer) Write(b []byte) (n int, e error) {
if len(b) > w.remaining_bytes {
b = b[0:w.remaining_bytes]
}
n, e = w.countedWrite(b)
w.remaining_bytes -= n
return
}
func (w *Writer) countedWrite(b []byte) (n int, e error) {
n, e = w.w.Write(b)
w.length += int64(n)
return n, e
}
// Writes trailer
// Does not close underlying writer
func (w *Writer) Close() error {
e := w.WriteHeader(&trailer)
if e != nil {
return e
}
return w.pad(512)
}