mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-06-04 05:10:40 +00:00
Merge pull request #581 from smira/pgp-golang
Implement new PGP provider via Go internal library
This commit is contained in:
Generated
+2
-2
@@ -1,4 +1,4 @@
|
||||
memo = "b793b143db9dc49ef630454bb15d4d259e88d411827adac1838ec9fd6727f229"
|
||||
memo = "becdf010a814559719c990c1bd645c737cee332ad52004c440605c13de100d45"
|
||||
|
||||
[[projects]]
|
||||
name = "github.com/AlekSi/pointer"
|
||||
@@ -169,7 +169,7 @@ memo = "b793b143db9dc49ef630454bb15d4d259e88d411827adac1838ec9fd6727f229"
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
name = "golang.org/x/crypto"
|
||||
packages = ["ssh/terminal"]
|
||||
packages = ["cast5","openpgp","openpgp/armor","openpgp/clearsign","openpgp/elgamal","openpgp/errors","openpgp/packet","openpgp/s2k","ssh/terminal"]
|
||||
revision = "459e26527287adbc2adcc5d0d49abff9a5f315a7"
|
||||
|
||||
[[projects]]
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ func getSigner(options *SigningOptions) (pgp.Signer, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
signer := &pgp.GpgSigner{}
|
||||
signer := context.GetSigner()
|
||||
signer.SetKey(options.GpgKey)
|
||||
signer.SetKeyRing(options.Keyring, options.SecretKeyring)
|
||||
signer.SetPassphrase(options.Passphrase, options.PassphraseFile)
|
||||
|
||||
+1
-2
@@ -9,7 +9,6 @@ import (
|
||||
"github.com/smira/aptly/aptly"
|
||||
"github.com/smira/aptly/database"
|
||||
"github.com/smira/aptly/deb"
|
||||
"github.com/smira/aptly/pgp"
|
||||
"github.com/smira/aptly/utils"
|
||||
)
|
||||
|
||||
@@ -297,7 +296,7 @@ func apiReposPackageFromDir(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
verifier := &pgp.GpgVerifier{}
|
||||
verifier := context.GetVerifier()
|
||||
|
||||
var (
|
||||
sources []string
|
||||
|
||||
@@ -58,8 +58,7 @@ _aptly()
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
|
||||
commands="api config db graph mirror package publish repo serve snapshot task version"
|
||||
options="-architectures= -config= -db-open-attempts= -dep-follow-all-variants -dep-follow-recommends -dep-follow-source -dep-follow-suggests -dep-verbose-resolve"
|
||||
|
||||
options="-architectures= -config= -db-open-attempts= -dep-follow-all-variants -dep-follow-recommends -dep-follow-source -dep-follow-suggests -dep-verbose-resolve -gpg-provider="
|
||||
db_subcommands="cleanup recover"
|
||||
mirror_subcommands="create drop edit show list rename search update"
|
||||
publish_subcommands="drop list repo snapshot switch update"
|
||||
|
||||
@@ -119,6 +119,7 @@ package environment to new version.`,
|
||||
cmd.Flag.Bool("dep-verbose-resolve", false, "when processing dependencies, print detailed logs")
|
||||
cmd.Flag.String("architectures", "", "list of architectures to consider during (comma-separated), default to all available")
|
||||
cmd.Flag.String("config", "", "location of configuration file (default locations are /etc/aptly.conf, ~/.aptly.conf)")
|
||||
cmd.Flag.String("gpg-provider", "", "PGP implementation (\"gpg\" for external gpg or \"internal\" for Go internal implementation)")
|
||||
|
||||
if aptly.EnableDebug {
|
||||
cmd.Flag.String("cpuprofile", "", "write cpu profile to file")
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ func getVerifier(flags *flag.FlagSet) (pgp.Verifier, error) {
|
||||
|
||||
keyRings := flags.Lookup("keyring").Value.Get().([]string)
|
||||
|
||||
verifier := &pgp.GpgVerifier{}
|
||||
verifier := context.GetVerifier()
|
||||
for _, keyRing := range keyRings {
|
||||
verifier.AddKeyring(keyRing)
|
||||
}
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ func getSigner(flags *flag.FlagSet) (pgp.Signer, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
signer := &pgp.GpgSigner{}
|
||||
signer := context.GetSigner()
|
||||
signer.SetKey(flags.Lookup("gpg-key").Value.String())
|
||||
signer.SetKeyRing(flags.Lookup("keyring").Value.String(), flags.Lookup("secret-keyring").Value.String())
|
||||
signer.SetPassphrase(flags.Lookup("passphrase").Value.String(), flags.Lookup("passphrase-file").Value.String())
|
||||
|
||||
+1
-2
@@ -6,7 +6,6 @@ import (
|
||||
|
||||
"github.com/smira/aptly/aptly"
|
||||
"github.com/smira/aptly/deb"
|
||||
"github.com/smira/aptly/pgp"
|
||||
"github.com/smira/aptly/utils"
|
||||
"github.com/smira/commander"
|
||||
"github.com/smira/flag"
|
||||
@@ -21,7 +20,7 @@ func aptlyRepoAdd(cmd *commander.Command, args []string) error {
|
||||
|
||||
name := args[0]
|
||||
|
||||
verifier := &pgp.GpgVerifier{}
|
||||
verifier := context.GetVerifier()
|
||||
|
||||
repo, err := context.CollectionFactory().LocalRepoCollection().ByName(name)
|
||||
if err != nil {
|
||||
|
||||
+1
-2
@@ -9,7 +9,6 @@ import (
|
||||
|
||||
"github.com/smira/aptly/aptly"
|
||||
"github.com/smira/aptly/deb"
|
||||
"github.com/smira/aptly/pgp"
|
||||
"github.com/smira/aptly/query"
|
||||
"github.com/smira/aptly/utils"
|
||||
"github.com/smira/commander"
|
||||
@@ -29,7 +28,7 @@ func aptlyRepoInclude(cmd *commander.Command, args []string) error {
|
||||
}
|
||||
|
||||
if verifier == nil {
|
||||
verifier = &pgp.GpgVerifier{}
|
||||
verifier = context.GetVerifier()
|
||||
}
|
||||
|
||||
forceReplace := context.Flags().Lookup("force-replace").Value.Get().(bool)
|
||||
|
||||
+42
-1
@@ -18,6 +18,7 @@ import (
|
||||
"github.com/smira/aptly/deb"
|
||||
"github.com/smira/aptly/files"
|
||||
"github.com/smira/aptly/http"
|
||||
"github.com/smira/aptly/pgp"
|
||||
"github.com/smira/aptly/s3"
|
||||
"github.com/smira/aptly/swift"
|
||||
"github.com/smira/aptly/utils"
|
||||
@@ -241,7 +242,7 @@ func (context *AptlyContext) _database() (database.Storage, error) {
|
||||
|
||||
context.database, err = database.NewDB(context.dbPath())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("can't instanciate database: %s", err)
|
||||
return nil, fmt.Errorf("can't instantiate database: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -373,6 +374,46 @@ func (context *AptlyContext) UploadPath() string {
|
||||
return filepath.Join(context.Config().RootDir, "upload")
|
||||
}
|
||||
|
||||
func (context *AptlyContext) pgpProvider() string {
|
||||
var provider string
|
||||
|
||||
if context.globalFlags.IsSet("gpg-provider") {
|
||||
provider = context.globalFlags.Lookup("gpg-provider").Value.String()
|
||||
} else {
|
||||
provider = context.config().GpgProvider
|
||||
}
|
||||
|
||||
if !(provider == "gpg" || provider == "internal") { // nolint: goconst
|
||||
Fatal(fmt.Errorf("unknown gpg provider: %v", provider))
|
||||
}
|
||||
|
||||
return provider
|
||||
}
|
||||
|
||||
// GetSigner returns Signer with respect to provider
|
||||
func (context *AptlyContext) GetSigner() pgp.Signer {
|
||||
context.Lock()
|
||||
defer context.Unlock()
|
||||
|
||||
if context.pgpProvider() == "gpg" { // nolint: goconst
|
||||
return &pgp.GpgSigner{}
|
||||
}
|
||||
|
||||
return &pgp.GoSigner{}
|
||||
}
|
||||
|
||||
// GetVerifier returns Verifier with respect to provider
|
||||
func (context *AptlyContext) GetVerifier() pgp.Verifier {
|
||||
context.Lock()
|
||||
defer context.Unlock()
|
||||
|
||||
if context.pgpProvider() == "gpg" { // nolint: goconst
|
||||
return &pgp.GpgVerifier{}
|
||||
}
|
||||
|
||||
return &pgp.GoVerifier{}
|
||||
}
|
||||
|
||||
// UpdateFlags sets internal copy of flags in the context
|
||||
func (context *AptlyContext) UpdateFlags(flags *flag.FlagSet) {
|
||||
context.Lock()
|
||||
|
||||
+2
-1
@@ -2,6 +2,7 @@ package deb
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -80,7 +81,7 @@ func (c *Changes) VerifyAndParse(acceptUnsigned, ignoreSignature bool, verifier
|
||||
c.SignatureKeys = keyInfo.GoodKeys
|
||||
}
|
||||
|
||||
var text *os.File
|
||||
var text io.ReadCloser
|
||||
|
||||
if isClearSigned {
|
||||
text, err = verifier.ExtractClearsigned(input)
|
||||
|
||||
+1
-1
@@ -90,7 +90,7 @@ func GetControlFileFromDsc(dscFile string, verifier pgp.Verifier) (Stanza, error
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var text *os.File
|
||||
var text io.ReadCloser
|
||||
|
||||
if isClearSigned {
|
||||
text, err = verifier.ExtractClearsigned(file)
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ func (s *DebSuite) TestGetControlFileFromDeb(c *C) {
|
||||
}
|
||||
|
||||
func (s *DebSuite) TestGetControlFileFromDsc(c *C) {
|
||||
verifier := &pgp.GpgVerifier{}
|
||||
verifier := &pgp.GoVerifier{}
|
||||
|
||||
_, err := GetControlFileFromDsc("/no/such/file", verifier)
|
||||
c.Check(err, ErrorMatches, ".*no such file or directory")
|
||||
|
||||
+1
-1
@@ -290,7 +290,7 @@ func (repo *RemoteRepo) Fetch(d aptly.Downloader, verifier pgp.Verifier) error {
|
||||
return err
|
||||
}
|
||||
|
||||
err = verifier.VerifyDetachedSignature(releasesig, release)
|
||||
err = verifier.VerifyDetachedSignature(releasesig, release, true)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ func (n *NullVerifier) InitKeyring() error {
|
||||
func (n *NullVerifier) AddKeyring(keyring string) {
|
||||
}
|
||||
|
||||
func (n *NullVerifier) VerifyDetachedSignature(signature, cleartext io.Reader) error {
|
||||
func (n *NullVerifier) VerifyDetachedSignature(signature, cleartext io.Reader, hint bool) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
+9
-1
@@ -46,6 +46,7 @@ Configuration file is stored in JSON format (default values shown below):
|
||||
"dependencyVerboseResolve": false,
|
||||
"gpgDisableSign": false,
|
||||
"gpgDisableVerify": false,
|
||||
"gpgProvider": "gpg",
|
||||
"downloadSourcePackages": false,
|
||||
"skipLegacyPool": true,
|
||||
"ppaDistributorID": "ubuntu",
|
||||
@@ -148,6 +149,10 @@ don\(cqt sign published repositories with gpg(1), also can be disabled on per\-r
|
||||
don\(cqt verify remote mirrors with gpg(1), also can be disabled on per\-mirror basis using \fB\-ignore\-signatures\fR flag when creating and updating mirrors
|
||||
.
|
||||
.TP
|
||||
\fBgpgProvider\fR
|
||||
implementation of PGP signing/validation \- \fBgpg\fR for external \fBgpg\fR utility or \fBinternal\fR to use Go internal implementation
|
||||
.
|
||||
.TP
|
||||
\fBdownloadSourcePackages\fR
|
||||
if enabled, all mirrors created would have flag set to download source packages; this setting could be controlled on per\-mirror basis with \fB\-with\-sources\fR flag
|
||||
.
|
||||
@@ -427,6 +432,10 @@ when processing dependencies, follow Suggests
|
||||
\-\fBdep\-verbose\-resolve\fR=false
|
||||
when processing dependencies, print detailed logs
|
||||
.
|
||||
.TP
|
||||
\-\fBgpg\-provider\fR=
|
||||
PGP implementation ("gpg" for external gpg or "internal" for Go internal implementation)
|
||||
.
|
||||
.SH "CREATE NEW MIRROR"
|
||||
\fBaptly\fR \fBmirror\fR \fBcreate\fR \fIname\fR \fIarchive url\fR \fIdistribution\fR [\fIcomponent1\fR \|\.\|\.\|\.]
|
||||
.
|
||||
@@ -1984,4 +1993,3 @@ Clemens Rabe (https://github\.com/seeraven)
|
||||
TJ Merritt (https://github\.com/tjmerritt)
|
||||
.
|
||||
.IP "" 0
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ Configuration file is stored in JSON format (default values shown below):
|
||||
"dependencyVerboseResolve": false,
|
||||
"gpgDisableSign": false,
|
||||
"gpgDisableVerify": false,
|
||||
"gpgProvider": "gpg",
|
||||
"downloadSourcePackages": false,
|
||||
"skipLegacyPool": true,
|
||||
"ppaDistributorID": "ubuntu",
|
||||
@@ -127,6 +128,10 @@ Options:
|
||||
don't verify remote mirrors with gpg(1), also can be disabled on
|
||||
per-mirror basis using `-ignore-signatures` flag when creating and updating mirrors
|
||||
|
||||
* `gpgProvider`:
|
||||
implementation of PGP signing/validation - `gpg` for external `gpg` utility or
|
||||
`internal` to use Go internal implementation
|
||||
|
||||
* `downloadSourcePackages`:
|
||||
if enabled, all mirrors created would have flag set to download source packages;
|
||||
this setting could be controlled on per-mirror basis with `-with-sources` flag
|
||||
|
||||
+1822
File diff suppressed because it is too large
Load Diff
+1791
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,17 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABAgAGBQJY3WKsAAoJEK4Dls/4JTVAqs4P/2O21/A2/TB0d/wWfG4tPlVE
|
||||
p6+MpnPevspHtM3pGtD9z92WJO9K8BhjoUHwDh/GByqdt3mDXNccMlV/T5ZKP2It
|
||||
ZqHRLs5g1Sx6JBeARbyU1VXVx0Gkkji8EjIzR/0edZ7BXtPiFxf+dJWeOCHAz1VM
|
||||
NdBp/629r+FzGRn7vPW0Y8gOgNE6s2MeFlbw2apLT9CULdgt0Y6r5cv4eH6qaid5
|
||||
HEIZP5U98sBWsRP7SfRQKrjtHNGuZMsDDWuw83mhFOX4Lr5DvfZLKpuJYrOeGJTg
|
||||
O8Uu+gVQK0tSuN+YgdA0Q/Uahvlj0mgI3mkb9kmo19lISHF8bGVD/9zGeltqTzbv
|
||||
66nnpkXv132wqLElvZnsC6cwovpe9/2EpVGppFpw01D7Mrg+l8lO+FCMyLYaxNde
|
||||
6KtRDO7WSKSX2iNobrbbTlsw62OdgEyN3yfgaq7hN268MK4rd+mKEywUB5TXmbyo
|
||||
5HdnSGmL7LFbc2T5UzoYmSd6Y1wKCd1S8NeFSB0V2hMVm7UP8+3PDsyYwyzi1G+E
|
||||
n25+WOcl8qFX94aKXAxLwikzi1dPt3qDgfckiC2cJvc/nBN+A8KKfyf1M63Q4G/G
|
||||
mCZ1ehmWUqnpwImw6w0YJCjkiuY/zqCYiHdOmCtRe6iUmaejzKY+9oVF6A5XxB+P
|
||||
3+LnLWVzCmq2H/3PvxwJ
|
||||
=Rtpk
|
||||
-----END PGP SIGNATURE-----
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
Architectures: all
|
||||
Codename: deb
|
||||
Components: contrib
|
||||
Date: Thu, 30 Mar 2017 19:55:24 UTC
|
||||
Label: PagerDuty, Inc.
|
||||
Origin: PagerDuty, Inc.
|
||||
Suite: stable
|
||||
MD5Sum:
|
||||
582e25878889dfecf25c00d459f4bdd7 13861 Packages
|
||||
49b1c5a52954278c4f06164bcfe95e50 2877 Packages.gz
|
||||
db77040214a23ab564e3c3a09768dfea 2446 deb/Packages
|
||||
5799d88860e10251afb6737995811b3d 973 deb/Packages.gz
|
||||
20ba00172df962f951c70828c9fa8123 944 deb/Release
|
||||
SHA1:
|
||||
80e58103a3234f0f3b0920d1dd16d97f4ffc11a6 13861 Packages
|
||||
7e8916c13357363b0464cd5fc8fd469042ad6e23 2877 Packages.gz
|
||||
5a0cb9e0246a7c130a7be271fddd25cbba851a65 2446 deb/Packages
|
||||
b661dbb9991d9ccf7c181426e86713dcfc70c609 973 deb/Packages.gz
|
||||
f6f96166c00229f0c463b2c654ebd0a499bb084a 944 deb/Release
|
||||
SHA256:
|
||||
a6c561644cdaa4dd1562698147f19e2cf3f6cd0efef172a68c1d164f1acb5095 13861 Packages
|
||||
ba6abb2016c2e667affd07c80659acd1ddbdce3f36cd87e8dcff9824a62d65e1 2877 Packages.gz
|
||||
2b9133de7bd0ac7ac4dc9fa95a81c9cb9a3ccd9cdb6a945e4a3b05af110cf7f4 2446 deb/Packages
|
||||
a4245f236c5fc3a6a53b25dff144433e9c648a08cca4ae86edd5e46aa14236da 973 deb/Packages.gz
|
||||
1ee2657183dd48cdbd30b87f373cf2ae9951c3970e7a4a5ef1e5a1a07b777427 944 deb/Release
|
||||
SHA512:
|
||||
af258ba087feb8a9782075678d57d3706c9390a765fe8d34afee4143b5da83c16fdd8ea6f99f0b9979a9d77dc4db088c2aa7037576f0c5e29f1da3e9cd20bd05 13861 Packages
|
||||
b3473ec7e4a1dced6daec0f6f477ec31c4eb8b7a174e068d259c21358728f2b9c5711f2c716055f524d478a057cbf78a710453fc0ba800d86fa1505a141fdf6b 2877 Packages.gz
|
||||
6e8f55f55489560094a5a98fc65ca2930c942e76f6e9ad924fe877c075ba08297d9e43163a0069224f6e8f5304943aac89c1ed45f34c9533b2b76d3c0a79ab27 2446 deb/Packages
|
||||
e4e0a8440fd2198e358037c4b674ffcb245cbcf93a4f1bcd6158489b62d545a2078e9498e59180c27cbd2465c7941255275a8187f1bf119e80f8b227ce028d5f 973 deb/Packages.gz
|
||||
b119366fef79f31f5e33876527dcec1d76037ebdcfc5c2380ba512e90b59db00bdd9fbceda977744be87a211df5f1c1fd5c41dafccef345d752a460f7fa54b3a 944 deb/Release
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iEYEABEKAAYFAlNrkrEACgkQQJdur0N9BbV7RgCfbZGjC7ejdU5fMW6Kbk6bRQcS
|
||||
G2sAn1h7znlqgxolQOhYVAnsfmu96aTbiQIcBAABCgAGBQJTa5KxAAoJEDtP5qzA
|
||||
sh8yat4QALTR1k1DKijcCu9NHWm0p5iz6+cFOmUnYS8ewjhS3Oy5mk9WjXLTpOID
|
||||
BBykbsXnNIEpx4nvPhwX2jb/8XJNIT5pyhHDD7ydbQsDsQnhaah1gBwd5ZP3gwpF
|
||||
9IGJ15V4737rqeifYNKohn8//4GQsoIuhzyMOqIq8lIpOJyKzWvJm9ToW7kurF1d
|
||||
yQvB2rdXgOLUgXnpzsLu3Xw/p0bY+OUkdTxbfg+UxOIvwI1DYOPrTq/vPunMkA0C
|
||||
QuXv7yTdYiWWoV3IUqzF5iwY0nJAcfH6bBmyXXgr9WY9QXSw+CUjMfTI3EPCG8Rw
|
||||
8Z9z7LJ8zeH7DucaDkSVmPUE8uKPspc7CHuZ5b09O435TdbiargNAXwRNKKlEXcr
|
||||
1bQ2CZfve5jxKv3g7xEk4C/LpNMd/0w7DsqIuw6lRwoc4vNqdPlQMjywnHFNYTDl
|
||||
s5Tilg2T2pSE9SRRhLQtGAVP2VU5AD/WJfAUDHM5zLm9avZKsOphiTuXDJkaZxr7
|
||||
eMn1kQyzCh30ac9zJukh8PfEREY/BT8JFC7qWWUZ2zeevsOQZJ0WHL/lm6TZRsgX
|
||||
84qD7Z2UrTClnTNd6CUKHm6ispT9uC/BTFZ7efrw8mTPJotBNOpPNgmOVXFKsuoh
|
||||
SyHY769UhUN2MeCGjsLjee5jRg2moS421UmBZbeRgicH92BUaWzL
|
||||
=7r4e
|
||||
-----END PGP SIGNATURE-----
|
||||
+576
@@ -0,0 +1,576 @@
|
||||
Origin: Ubuntu
|
||||
Label: Ubuntu
|
||||
Suite: trusty
|
||||
Version: 14.04
|
||||
Codename: trusty
|
||||
Date: Thu, 08 May 2014 14:19:09 UTC
|
||||
Architectures: amd64 arm64 armhf i386 powerpc ppc64el
|
||||
Components: main restricted universe multiverse
|
||||
Description: Ubuntu Trusty 14.04
|
||||
MD5Sum:
|
||||
ead1cbf42ed119c50bf3aab28b5b6351 8234934 main/binary-amd64/Packages
|
||||
52d605b4217be64f461751f233dd9a8f 96 main/binary-amd64/Release
|
||||
4c2ecc07c5b3859ee08bd41f788a5a79 1743009 main/binary-amd64/Packages.gz
|
||||
eb5ec6102dfe1dd632fda76e55a33f07 1350329 main/binary-amd64/Packages.bz2
|
||||
2f6aba238097579bbb4fe92e5bfa0858 7558784 main/binary-arm64/Packages
|
||||
5c1efe41ea46ec1a7505c8ed0e93a10d 96 main/binary-arm64/Release
|
||||
17aecd461a6ca661b908421f4bea099e 1250640 main/binary-arm64/Packages.bz2
|
||||
e569d8f3777b8b4eaab5a570a3f7f61a 1611082 main/binary-arm64/Packages.gz
|
||||
f1511890bcd2250106292e06bc5d57d3 96 main/binary-armhf/Release
|
||||
7a3737aa46a2c9397b398c8b00533263 7860402 main/binary-armhf/Packages
|
||||
44f4d9ef07ae3524dd9b28302f263998 1295158 main/binary-armhf/Packages.bz2
|
||||
444a1d2e397cf2c6ff0b33c0fcf3f907 1671757 main/binary-armhf/Packages.gz
|
||||
60cd95dff4f53976b4179a8a061a666e 95 main/binary-i386/Release
|
||||
c0401f75d3c2fd349072389b69665f2a 1347897 main/binary-i386/Packages.bz2
|
||||
ef0029e4b37d822b9c01780a8d77b0c6 1739448 main/binary-i386/Packages.gz
|
||||
fdac87cc6bf443d7a7baac96d846907f 8205285 main/binary-i386/Packages
|
||||
11435a5ddcb607dcf247e04019667882 7733542 main/binary-powerpc/Packages
|
||||
20bc106da87c29d21ac98a3b9f977ebc 1666061 main/binary-powerpc/Packages.gz
|
||||
d1feddb79825bde70d5af3487a6bc861 98 main/binary-powerpc/Release
|
||||
c94022dfd6b8c4d43c8c6432e8a341ba 1290478 main/binary-powerpc/Packages.bz2
|
||||
3911ac3478a100b5585c12482aa0a668 1253972 main/binary-ppc64el/Packages.bz2
|
||||
863e1b0ced6f8d6a069dc468ce482818 7578968 main/binary-ppc64el/Packages
|
||||
f9f629674f30e818b12daaf774dc2a48 98 main/binary-ppc64el/Release
|
||||
a997bdc0d0e10639ff19653f96c6465c 1615001 main/binary-ppc64el/Packages.gz
|
||||
cfa7b7931f359550e89c2179c3a0f648 60753 main/debian-installer/binary-amd64/Packages.gz
|
||||
ea517edec04b84c0229d8a53fb4c26e0 225667 main/debian-installer/binary-amd64/Packages
|
||||
718f06262135a36f34afe1a9b3a4af9f 47239 main/debian-installer/binary-amd64/Packages.bz2
|
||||
a8ec86f19eac7f71d8221cd4c3576b36 211920 main/debian-installer/binary-arm64/Packages
|
||||
ddd1cdb53f4c84980c4fe84b03470491 45145 main/debian-installer/binary-arm64/Packages.bz2
|
||||
66ccbf589de7bec813e0d7331dca1200 57576 main/debian-installer/binary-arm64/Packages.gz
|
||||
c8930b4d8f2e99706fe64b90e7bd0248 61813 main/debian-installer/binary-armhf/Packages.gz
|
||||
44dd074b0ae0041957390b6afc3df83e 48283 main/debian-installer/binary-armhf/Packages.bz2
|
||||
6ee30df3aebab8e115d0d070b586154f 234956 main/debian-installer/binary-armhf/Packages
|
||||
0d0c6e9900350c39f7a445d91941bcf6 47141 main/debian-installer/binary-i386/Packages.bz2
|
||||
eddf0a8437d508e3e12cc91f06b0d8eb 225069 main/debian-installer/binary-i386/Packages
|
||||
065f4a7195b7faa94b3501ff1232e736 60622 main/debian-installer/binary-i386/Packages.gz
|
||||
8e44fd0e9aca7f6a23f257d6d3974dcc 74013 main/debian-installer/binary-powerpc/Packages.gz
|
||||
b885d6a6c62eaa4b2f1f9dfee8a683dd 300974 main/debian-installer/binary-powerpc/Packages
|
||||
727ad3397f8d2592109207f6d141c845 56758 main/debian-installer/binary-powerpc/Packages.bz2
|
||||
872e58f0ec990c7107e9d860a68a32b7 58701 main/debian-installer/binary-ppc64el/Packages.gz
|
||||
dc0b6e3d06cebf57e7f67f43355e00b9 216539 main/debian-installer/binary-ppc64el/Packages
|
||||
cf3d1878eddaec9873365c1f95530dc5 45829 main/debian-installer/binary-ppc64el/Packages.bz2
|
||||
0cc415385a3763c3dd5e9068c993a1dc 3632 main/i18n/Index
|
||||
001a04ae674fd4ce5ffeaa5d0115f6b9 1064355 main/source/Sources.bz2
|
||||
84e46e3c8fb9cb1238fe0514f496fbe8 97 main/source/Release
|
||||
b59289788042f3c32c47bf4b2129da47 5000095 main/source/Sources
|
||||
5ed448c8440a7b1b02170dc58c0abfe3 1334581 main/source/Sources.gz
|
||||
2f3db27f73fdb5832034af6c49cc5adf 102 multiverse/binary-amd64/Release
|
||||
0fdc04fa805330834fccde8802effb46 132333 multiverse/binary-amd64/Packages.bz2
|
||||
ab451c93400c540a54cc1381bfbc151b 169243 multiverse/binary-amd64/Packages.gz
|
||||
285cfb7f0ab4f4fd52f0c69f70966bba 663770 multiverse/binary-amd64/Packages
|
||||
244200e6351001f44500f87be2425e2f 138708 multiverse/binary-arm64/Packages.gz
|
||||
9e99f5310dfb8754426b62cbfd749a0c 531113 multiverse/binary-arm64/Packages
|
||||
2dd72991c4b563b2d693ca27a2e88a11 108957 multiverse/binary-arm64/Packages.bz2
|
||||
1cd29757f9d8db51c342ea0b9770428d 102 multiverse/binary-arm64/Release
|
||||
49acec4cb1f92e82a9a8cd7d5aa85d1d 111514 multiverse/binary-armhf/Packages.bz2
|
||||
7b922bed556286da66c85e14b0fea234 142115 multiverse/binary-armhf/Packages.gz
|
||||
ebe66e71714860defe28166f46979cb0 102 multiverse/binary-armhf/Release
|
||||
2aa53357cfabdc4a029e82b95a38217b 545287 multiverse/binary-armhf/Packages
|
||||
bd8d2b8f0232774b4ca75497caeb1568 172036 multiverse/binary-i386/Packages.gz
|
||||
f61039393d68b399d87f4c036d653003 673626 multiverse/binary-i386/Packages
|
||||
bcfd07eb46783a176ffd275273f70e1c 134298 multiverse/binary-i386/Packages.bz2
|
||||
026f83b5f4d7d30c2e396b75789d2dbe 101 multiverse/binary-i386/Release
|
||||
ec6165204c1b20d9afb49e8bf6ba9a55 559226 multiverse/binary-powerpc/Packages
|
||||
108954b325ae3c2fb70063df3456f0ff 145768 multiverse/binary-powerpc/Packages.gz
|
||||
2a164a97606debd8f9fb2af0d9b6c918 104 multiverse/binary-powerpc/Release
|
||||
f195403aa1fe8e3092ca51acad24c834 114089 multiverse/binary-powerpc/Packages.bz2
|
||||
ddca93fc2b8a2872bbdcba2b4175d7ed 515410 multiverse/binary-ppc64el/Packages
|
||||
9a113761093caa1ea66ee6f5372170ef 135313 multiverse/binary-ppc64el/Packages.gz
|
||||
f01d68e235d888d03830dd348b37fc54 106684 multiverse/binary-ppc64el/Packages.bz2
|
||||
b2d52bb5e1df99abab7d5299d5e58f0c 104 multiverse/binary-ppc64el/Release
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 multiverse/debian-installer/binary-amd64/Packages
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 multiverse/debian-installer/binary-amd64/Packages.gz
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 multiverse/debian-installer/binary-amd64/Packages.bz2
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 multiverse/debian-installer/binary-arm64/Packages
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 multiverse/debian-installer/binary-arm64/Packages.gz
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 multiverse/debian-installer/binary-arm64/Packages.bz2
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 multiverse/debian-installer/binary-armhf/Packages.gz
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 multiverse/debian-installer/binary-armhf/Packages
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 multiverse/debian-installer/binary-armhf/Packages.bz2
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 multiverse/debian-installer/binary-i386/Packages.gz
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 multiverse/debian-installer/binary-i386/Packages.bz2
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 multiverse/debian-installer/binary-i386/Packages
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 multiverse/debian-installer/binary-powerpc/Packages.bz2
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 multiverse/debian-installer/binary-powerpc/Packages
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 multiverse/debian-installer/binary-powerpc/Packages.gz
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 multiverse/debian-installer/binary-ppc64el/Packages.bz2
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 multiverse/debian-installer/binary-ppc64el/Packages.gz
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 multiverse/debian-installer/binary-ppc64el/Packages
|
||||
f127b31564b2f6f4ee1e847280784baf 2537 multiverse/i18n/Index
|
||||
16a0821a177de24b329d00dc1d01e767 711248 multiverse/source/Sources
|
||||
266009600bdbb865f69a0408d316bb2c 211094 multiverse/source/Sources.gz
|
||||
c98016dd15a34d1369b46f244749e18e 173561 multiverse/source/Sources.bz2
|
||||
10253b3b199e8a46ca8d5f6519037ecc 103 multiverse/source/Release
|
||||
cc40839b401c52259c842a19ce5b1f57 184141 restricted/binary-amd64/Packages
|
||||
ce1f8bec5381dd2e138231eb84ddf11a 15974 restricted/binary-amd64/Packages.gz
|
||||
201f8af37ae22eb13dee92945108361a 102 restricted/binary-amd64/Release
|
||||
f80e229c51be7e2c16ce70fb13053619 13028 restricted/binary-amd64/Packages.bz2
|
||||
835fc0235bfcaf3993f061835a9f2715 102 restricted/binary-arm64/Release
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 restricted/binary-arm64/Packages.gz
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 restricted/binary-arm64/Packages.bz2
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 restricted/binary-arm64/Packages
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 restricted/binary-armhf/Packages.bz2
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 restricted/binary-armhf/Packages.gz
|
||||
849508d9260957987d315ddb19c626eb 102 restricted/binary-armhf/Release
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 restricted/binary-armhf/Packages
|
||||
0091b45648917e7e1b2f3cf8daf3c33a 16421 restricted/binary-i386/Packages.gz
|
||||
28e2da9f9de2169e86761bf169a1085e 185074 restricted/binary-i386/Packages
|
||||
597bd61f5dc069694e425070241bd2d9 101 restricted/binary-i386/Release
|
||||
791f8e0dacc967f0556506862b1792ec 13418 restricted/binary-i386/Packages.bz2
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 restricted/binary-powerpc/Packages.bz2
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 restricted/binary-powerpc/Packages.gz
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 restricted/binary-powerpc/Packages
|
||||
b563e3c8577589b0cdd7819c119e3f39 104 restricted/binary-powerpc/Release
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 restricted/binary-ppc64el/Packages.gz
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 restricted/binary-ppc64el/Packages.bz2
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 restricted/binary-ppc64el/Packages
|
||||
91fcac8bfd1f2d92b99d285e229aaa31 104 restricted/binary-ppc64el/Release
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 restricted/debian-installer/binary-amd64/Packages
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 restricted/debian-installer/binary-amd64/Packages.bz2
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 restricted/debian-installer/binary-amd64/Packages.gz
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 restricted/debian-installer/binary-arm64/Packages.bz2
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 restricted/debian-installer/binary-arm64/Packages.gz
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 restricted/debian-installer/binary-arm64/Packages
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 restricted/debian-installer/binary-armhf/Packages.gz
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 restricted/debian-installer/binary-armhf/Packages.bz2
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 restricted/debian-installer/binary-armhf/Packages
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 restricted/debian-installer/binary-i386/Packages.bz2
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 restricted/debian-installer/binary-i386/Packages
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 restricted/debian-installer/binary-i386/Packages.gz
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 restricted/debian-installer/binary-powerpc/Packages.gz
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 restricted/debian-installer/binary-powerpc/Packages.bz2
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 restricted/debian-installer/binary-powerpc/Packages
|
||||
4059d198768f9f8dc9372dc1c54bc3c3 14 restricted/debian-installer/binary-ppc64el/Packages.bz2
|
||||
d41d8cd98f00b204e9800998ecf8427e 0 restricted/debian-installer/binary-ppc64el/Packages
|
||||
e62ff0123a74adfc6903d59a449cbdb0 40 restricted/debian-installer/binary-ppc64el/Packages.gz
|
||||
61785dd9ee2b27ef49e479612445aba5 2797 restricted/i18n/Index
|
||||
7b8d5c8f218ece1ca37af77d3941011b 103 restricted/source/Release
|
||||
74b86826be17320e48b75d9d147dea85 22871 restricted/source/Sources
|
||||
524634c35022d77f335fe1d31fe898a4 5335 restricted/source/Sources.gz
|
||||
f1aa9496b043ed8dfd6370613cd2d541 5433 restricted/source/Sources.bz2
|
||||
39929667be5295b337096d56a22ff00d 5858915 universe/binary-amd64/Packages.bz2
|
||||
88dfe49b08ef4cc97be5100708801f16 31726252 universe/binary-amd64/Packages
|
||||
5b09a1ccd3b556acbc9b41f672cb0a17 7588885 universe/binary-amd64/Packages.gz
|
||||
33da0973d988a07848e8a42e49d020b0 100 universe/binary-amd64/Release
|
||||
0f4badf9124d44b5bab0da661aa6c9b8 5472750 universe/binary-arm64/Packages.bz2
|
||||
bb5eaa39a1c80edf5056900df6d73930 7092987 universe/binary-arm64/Packages.gz
|
||||
d4d4d8801988209535570f4fd6c95e1f 100 universe/binary-arm64/Release
|
||||
c242ad8c87918e715974c9bf29b958ec 29495907 universe/binary-arm64/Packages
|
||||
881db7787b51e0e6781b247c52068c11 7392868 universe/binary-armhf/Packages.gz
|
||||
c08579cb9190854439661d60f70f511b 100 universe/binary-armhf/Release
|
||||
09cf58c0ba5f0df54b0e9d11179b9a75 5709820 universe/binary-armhf/Packages.bz2
|
||||
616c32f4bfbc5a10ce066d67661c8517 30858268 universe/binary-armhf/Packages
|
||||
164e07bcf2b6187047415c47e989f0bf 31721739 universe/binary-i386/Packages
|
||||
0edfdcaeca7a0637a74b0d47dc35dbca 99 universe/binary-i386/Release
|
||||
b169eeedd8485c3548a8485e70965e1c 7597482 universe/binary-i386/Packages.gz
|
||||
821ddb1530f4e8181cac84544fa7ebca 5865806 universe/binary-i386/Packages.bz2
|
||||
17d0cddc3229ee6406c3250602ea0f43 7432885 universe/binary-powerpc/Packages.gz
|
||||
69e7ab8f0e3656cbbd0b04ca9c9cc9aa 5740380 universe/binary-powerpc/Packages.bz2
|
||||
f131bad3a818ea8de7efeb80ccd3027c 102 universe/binary-powerpc/Release
|
||||
d9c525345ca05423650828e938f4b3f9 31053897 universe/binary-powerpc/Packages
|
||||
ce58d697ceb65c22a92c22579b1fe4a4 5410980 universe/binary-ppc64el/Packages.bz2
|
||||
bf7731480c1f7d9d286d8456b8a4bdfc 7014198 universe/binary-ppc64el/Packages.gz
|
||||
90b9ab6a197ff60e9f5176568ba796f3 29263935 universe/binary-ppc64el/Packages
|
||||
5a6f3ee33fbd0a30c5196f4b04332c2a 102 universe/binary-ppc64el/Release
|
||||
c33c2cc6c0f6f925f53c034709b482ea 16358 universe/debian-installer/binary-amd64/Packages.bz2
|
||||
31926f03025b8d6cb79b539f0c0b5209 66510 universe/debian-installer/binary-amd64/Packages
|
||||
bc0c8e8991b43d290f7dd0763f7026e6 18642 universe/debian-installer/binary-amd64/Packages.gz
|
||||
fb987fcd3c8b52079332fc4a7785487d 17173 universe/debian-installer/binary-arm64/Packages.gz
|
||||
9274d5bbb8780c31298b506ed922b1f6 15166 universe/debian-installer/binary-arm64/Packages.bz2
|
||||
7fdf2f961964e795bacdd96d34cbbb3f 61058 universe/debian-installer/binary-arm64/Packages
|
||||
680c25462bf367c02b9c64c70487395d 19771 universe/debian-installer/binary-armhf/Packages.bz2
|
||||
975fab4af7507b30fcf0b893bce1c813 87043 universe/debian-installer/binary-armhf/Packages
|
||||
2f258307a293d652ff6abfb0c3f8aa75 23121 universe/debian-installer/binary-armhf/Packages.gz
|
||||
6fa772efc9122c18a075c83a6eacc728 66419 universe/debian-installer/binary-i386/Packages
|
||||
446feb54ec1b8203c606f2f0e8378815 18628 universe/debian-installer/binary-i386/Packages.gz
|
||||
c6a871d4c45d9307c9e86157182f792a 16386 universe/debian-installer/binary-i386/Packages.bz2
|
||||
b72062c62f4114f3b4c796ead959a42a 65864 universe/debian-installer/binary-powerpc/Packages
|
||||
e188b3870020036b02e3a914bb047306 16188 universe/debian-installer/binary-powerpc/Packages.bz2
|
||||
239dde656c48f8fd4770be6b3efa866e 18396 universe/debian-installer/binary-powerpc/Packages.gz
|
||||
17a28d31567bf69ea3d3fa9703a538f4 61855 universe/debian-installer/binary-ppc64el/Packages
|
||||
5513536770797f452d8270d054e0bd1e 17404 universe/debian-installer/binary-ppc64el/Packages.gz
|
||||
2c9666e111c2cde20b544c18eae1b5b7 15319 universe/debian-installer/binary-ppc64el/Packages.bz2
|
||||
2d3d58225443cc1c8de692a1a3290ec0 3129 universe/i18n/Index
|
||||
cf53a6b31e2db1c36f83bd3517e33861 6398981 universe/source/Sources.bz2
|
||||
06aaf1f1e45c4b33ae8e3bc520731fda 101 universe/source/Release
|
||||
22b4c0eeb2df363eccd488eadfa7eef0 27857155 universe/source/Sources
|
||||
ad52c20d539762f3c44bf69b5162d694 7925687 universe/source/Sources.gz
|
||||
SHA1:
|
||||
28c4460e3aaf1b93f11911fdc4ff23c28809af89 8234934 main/binary-amd64/Packages
|
||||
d03d716bceaba35f91726c096e2a9a8c23ccc766 96 main/binary-amd64/Release
|
||||
1fc16e046e9bc12cba5de5c4ecc4286598e26a3a 1743009 main/binary-amd64/Packages.gz
|
||||
b1c099c5a476780f0e43f0be2debc508dba450c9 1350329 main/binary-amd64/Packages.bz2
|
||||
cc4aaeae07c5bbb6f0de1004528dad5101969148 7558784 main/binary-arm64/Packages
|
||||
65c70c9f616003a9cdae3219f4b0d433861d3ad1 96 main/binary-arm64/Release
|
||||
b2cd0938730dd2bd7988801041b34e03c5fd6541 1250640 main/binary-arm64/Packages.bz2
|
||||
b67e2a5664e70bb9dc1f07abb7a327238cb4c74f 1611082 main/binary-arm64/Packages.gz
|
||||
d7bb438facf5bb2af807ba0830e079609c54bfed 96 main/binary-armhf/Release
|
||||
8610541786ae55a10cb13c00cab1e12937ab3337 7860402 main/binary-armhf/Packages
|
||||
a6b996456b9d9abc56f067710061fe1ca4225a74 1295158 main/binary-armhf/Packages.bz2
|
||||
64a8cce95c70fbf754c12b4341b80753b80828d1 1671757 main/binary-armhf/Packages.gz
|
||||
874b6cd3776f85508fc3633b8c095c3422d8185c 95 main/binary-i386/Release
|
||||
aaafd7e34c248f2f45d7d03ccc4bc42a3162cbf9 1347897 main/binary-i386/Packages.bz2
|
||||
8764d68b9b17386acac2a33854ef286e50e28061 1739448 main/binary-i386/Packages.gz
|
||||
ad4157498e9b9a2c262e5f592707cac7f12a88ad 8205285 main/binary-i386/Packages
|
||||
acee4aa7267ded355b920e647b12a3d857f5aa5a 7733542 main/binary-powerpc/Packages
|
||||
39fa0207905212f22b137ab08cf300726f710f71 1666061 main/binary-powerpc/Packages.gz
|
||||
3b09890757debdccb7a9b78b1f089d1b33275330 98 main/binary-powerpc/Release
|
||||
ad77bdb0568ab718ade487d769c32f5ab36b0cfa 1290478 main/binary-powerpc/Packages.bz2
|
||||
24c31fb31484b0bd1ab00f2426b0c7fd7c6ab44d 1253972 main/binary-ppc64el/Packages.bz2
|
||||
046f60ec0d634cd80a245abd712b1ba2609ea454 7578968 main/binary-ppc64el/Packages
|
||||
464d708c2ef0c6c88ed679b66b0d52a3b737a44b 98 main/binary-ppc64el/Release
|
||||
2642244a451d54ed204f39327aa6989e54f38e15 1615001 main/binary-ppc64el/Packages.gz
|
||||
aef00023bbcb31a9de9ac9957d8e70ddfe10310d 60753 main/debian-installer/binary-amd64/Packages.gz
|
||||
92f6b24bb8cd0de4e41f61b8f287dede324ba6ac 225667 main/debian-installer/binary-amd64/Packages
|
||||
e688b84820d40054b8a934cbc5e676b18b3e60cb 47239 main/debian-installer/binary-amd64/Packages.bz2
|
||||
35e11a37577cbd3f08de892b7c5e2affe18c2f0b 211920 main/debian-installer/binary-arm64/Packages
|
||||
7b751182f6a3a21883a672259003c94771244f03 45145 main/debian-installer/binary-arm64/Packages.bz2
|
||||
c9ced692eb84a18b0eaa180d1faeea1402cac91c 57576 main/debian-installer/binary-arm64/Packages.gz
|
||||
498b1daeee8a7e721eb4acc4d8fedd73dab35f21 61813 main/debian-installer/binary-armhf/Packages.gz
|
||||
447626bce5305ec8da7d0b9b15baa0ccbceb67b0 48283 main/debian-installer/binary-armhf/Packages.bz2
|
||||
7d8f5847b5fd79c0fa613a6ba82f372980cf6712 234956 main/debian-installer/binary-armhf/Packages
|
||||
bb6216b3bf0aed98a2ef3b4f7ec83f7d4e07f767 47141 main/debian-installer/binary-i386/Packages.bz2
|
||||
fe599d3172018db7169b85f7704f77619c9604a7 225069 main/debian-installer/binary-i386/Packages
|
||||
d73bebce56d1125bf1656f7ddc535111084689e8 60622 main/debian-installer/binary-i386/Packages.gz
|
||||
bda46ee38948c3b3fe601eb6afd2f751c6cce876 74013 main/debian-installer/binary-powerpc/Packages.gz
|
||||
f3cb5af000dba0ffb3b71e2ebc856094b8dfd972 300974 main/debian-installer/binary-powerpc/Packages
|
||||
9ee183ab1bc6a44d74f8402939250e7ed6d19707 56758 main/debian-installer/binary-powerpc/Packages.bz2
|
||||
25762144912b0a207acc52fc5009ae3a0701ad77 58701 main/debian-installer/binary-ppc64el/Packages.gz
|
||||
6b6b9d288e289e33c7a15ac407ca5342f61c1d60 216539 main/debian-installer/binary-ppc64el/Packages
|
||||
05e2b318984cc002913b079b28f72b6314f6b1f7 45829 main/debian-installer/binary-ppc64el/Packages.bz2
|
||||
8919c169e6e9e33752aaa32000fb3538141ad324 3632 main/i18n/Index
|
||||
7209d3cfa58b19880b70486ea0701350ea1d1980 1064355 main/source/Sources.bz2
|
||||
93de1a5ad7b53da68b0ec619b2e11d73e26b82d5 97 main/source/Release
|
||||
06b9bd82e9402df0ee67b02644f19cbdf544d8ed 5000095 main/source/Sources
|
||||
ce5d571992c54f01dec21f80946659409394ef8e 1334581 main/source/Sources.gz
|
||||
7ddeba4f2004a956a25081c5e6d738176e8cc64d 102 multiverse/binary-amd64/Release
|
||||
6da273deb188dac93a870953d63ee62a888b7589 132333 multiverse/binary-amd64/Packages.bz2
|
||||
efa6196da6c558cf92ed295e0ef913c5381e62ad 169243 multiverse/binary-amd64/Packages.gz
|
||||
62cbdfcc0470e7a831b78c504dfb021ae72170c2 663770 multiverse/binary-amd64/Packages
|
||||
6cf3ef15c611245211c9b84565a8f25118a38c3c 138708 multiverse/binary-arm64/Packages.gz
|
||||
15ce9d58c807bc7628d984d4287ae4baea526fb0 531113 multiverse/binary-arm64/Packages
|
||||
f2ff76cfbadbe8c79a6d235940cfff2df05ab71b 108957 multiverse/binary-arm64/Packages.bz2
|
||||
799c7672856475892b46593e64b9c2c4b71e1266 102 multiverse/binary-arm64/Release
|
||||
f548827cbfadfd722fc9666b27f47e033f424177 111514 multiverse/binary-armhf/Packages.bz2
|
||||
3705a45de5bdbb489d9048e550fca2e56395946d 142115 multiverse/binary-armhf/Packages.gz
|
||||
7d23d93806b4069aaccf9a2654653ecdb4ee9ebb 102 multiverse/binary-armhf/Release
|
||||
17e7b030e7c29c95ef62c0760b73a857003d0091 545287 multiverse/binary-armhf/Packages
|
||||
588e07ee87b28477d9a996a22f82c2c0613d8561 172036 multiverse/binary-i386/Packages.gz
|
||||
a67d690b67505c7e092b5822b924a005e8cf06c0 673626 multiverse/binary-i386/Packages
|
||||
77b026cbc7fb74e36a8137874cc59244bfc8f075 134298 multiverse/binary-i386/Packages.bz2
|
||||
58d5e5c290f87ea5ac73583951986919b5a27afa 101 multiverse/binary-i386/Release
|
||||
4195721c04d4d6c23a82081731f4060cd0eb57a6 559226 multiverse/binary-powerpc/Packages
|
||||
90da77c85e7c58d2afb32c8ac153ecd9e514ac20 145768 multiverse/binary-powerpc/Packages.gz
|
||||
b4c2680be009f3fff0b96ac9c6dbf1c2e1fed5c6 104 multiverse/binary-powerpc/Release
|
||||
97055e00e594a3bbaa051ce8d8521918341c538f 114089 multiverse/binary-powerpc/Packages.bz2
|
||||
3e0d2535d03a09a6cc0e4b97845d9e7902e8c45d 515410 multiverse/binary-ppc64el/Packages
|
||||
590b06c30c5e782fd1d2eeb1fad5363d4b097dd8 135313 multiverse/binary-ppc64el/Packages.gz
|
||||
28860d879e4371fb55e2cca4be51c01ab4b5a848 106684 multiverse/binary-ppc64el/Packages.bz2
|
||||
78d6f89ef86016f4cd976ef6445ac269308a1015 104 multiverse/binary-ppc64el/Release
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 multiverse/debian-installer/binary-amd64/Packages
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 multiverse/debian-installer/binary-amd64/Packages.gz
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 multiverse/debian-installer/binary-amd64/Packages.bz2
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 multiverse/debian-installer/binary-arm64/Packages
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 multiverse/debian-installer/binary-arm64/Packages.gz
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 multiverse/debian-installer/binary-arm64/Packages.bz2
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 multiverse/debian-installer/binary-armhf/Packages.gz
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 multiverse/debian-installer/binary-armhf/Packages
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 multiverse/debian-installer/binary-armhf/Packages.bz2
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 multiverse/debian-installer/binary-i386/Packages.gz
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 multiverse/debian-installer/binary-i386/Packages.bz2
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 multiverse/debian-installer/binary-i386/Packages
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 multiverse/debian-installer/binary-powerpc/Packages.bz2
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 multiverse/debian-installer/binary-powerpc/Packages
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 multiverse/debian-installer/binary-powerpc/Packages.gz
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 multiverse/debian-installer/binary-ppc64el/Packages.bz2
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 multiverse/debian-installer/binary-ppc64el/Packages.gz
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 multiverse/debian-installer/binary-ppc64el/Packages
|
||||
66b5d8d672186b1b717aec3a9ef2622f2d751e90 2537 multiverse/i18n/Index
|
||||
41613d23a2c7ffb06d4c0a803ccb5aa2e2b9edaf 711248 multiverse/source/Sources
|
||||
21a0df1323cfde6032350769d93db7c4927771f7 211094 multiverse/source/Sources.gz
|
||||
b61a76b0e8530d7cfac4b17689469513e07b7ab7 173561 multiverse/source/Sources.bz2
|
||||
6279277c4f7884e5a7c8d3d12e0d68a55b0be77e 103 multiverse/source/Release
|
||||
d6e2ffd215a8c9827d77ee9756ef1bf60ab5903f 184141 restricted/binary-amd64/Packages
|
||||
10ea92b020dc2cdef52637576406d221b96bf56b 15974 restricted/binary-amd64/Packages.gz
|
||||
321f993ee4660e80e34c918f4e5b93ebe08d6b3f 102 restricted/binary-amd64/Release
|
||||
d4b0ac272c53899f2ac69020b4bb2abdc54873e4 13028 restricted/binary-amd64/Packages.bz2
|
||||
cd906196d7f2cc234e1f720789992b649a18db2b 102 restricted/binary-arm64/Release
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 restricted/binary-arm64/Packages.gz
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 restricted/binary-arm64/Packages.bz2
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 restricted/binary-arm64/Packages
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 restricted/binary-armhf/Packages.bz2
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 restricted/binary-armhf/Packages.gz
|
||||
d4b045e87c2147a84b2670ee6c278044e8654ab1 102 restricted/binary-armhf/Release
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 restricted/binary-armhf/Packages
|
||||
fca0dcd7ad773409f7b21f9f4e48d0d4d6097bc1 16421 restricted/binary-i386/Packages.gz
|
||||
2d0ccc0730f3eeb982fbdf06ac379c6e50e46359 185074 restricted/binary-i386/Packages
|
||||
912736ac362f34b555ea831060fe7fda99953c07 101 restricted/binary-i386/Release
|
||||
449baac3269ff163cd6be4ca57f90e805a1ac94c 13418 restricted/binary-i386/Packages.bz2
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 restricted/binary-powerpc/Packages.bz2
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 restricted/binary-powerpc/Packages.gz
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 restricted/binary-powerpc/Packages
|
||||
4d19f8f47500a5211e1b1b019cc51ae59facedd5 104 restricted/binary-powerpc/Release
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 restricted/binary-ppc64el/Packages.gz
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 restricted/binary-ppc64el/Packages.bz2
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 restricted/binary-ppc64el/Packages
|
||||
1c7c0a04598806fefc7b9d62550fd69f475b0166 104 restricted/binary-ppc64el/Release
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 restricted/debian-installer/binary-amd64/Packages
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 restricted/debian-installer/binary-amd64/Packages.bz2
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 restricted/debian-installer/binary-amd64/Packages.gz
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 restricted/debian-installer/binary-arm64/Packages.bz2
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 restricted/debian-installer/binary-arm64/Packages.gz
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 restricted/debian-installer/binary-arm64/Packages
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 restricted/debian-installer/binary-armhf/Packages.gz
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 restricted/debian-installer/binary-armhf/Packages.bz2
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 restricted/debian-installer/binary-armhf/Packages
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 restricted/debian-installer/binary-i386/Packages.bz2
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 restricted/debian-installer/binary-i386/Packages
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 restricted/debian-installer/binary-i386/Packages.gz
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 restricted/debian-installer/binary-powerpc/Packages.gz
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 restricted/debian-installer/binary-powerpc/Packages.bz2
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 restricted/debian-installer/binary-powerpc/Packages
|
||||
64a543afbb5f4bf728636bdcbbe7a2ed0804adc2 14 restricted/debian-installer/binary-ppc64el/Packages.bz2
|
||||
da39a3ee5e6b4b0d3255bfef95601890afd80709 0 restricted/debian-installer/binary-ppc64el/Packages
|
||||
e3f4c61a216c2c9613cd3bdd1420dde095b296b3 40 restricted/debian-installer/binary-ppc64el/Packages.gz
|
||||
5860f846e01e703cad4de996bde4c17472d69dae 2797 restricted/i18n/Index
|
||||
a2abc4c58ebadd9cadd44ee9955aea7afd0f299f 103 restricted/source/Release
|
||||
3d17aaed5fc8f491685e7db694ee7ee51cdfa267 22871 restricted/source/Sources
|
||||
0f9a73d7bd8e0c8da0d6c17d97a83c18295493cd 5335 restricted/source/Sources.gz
|
||||
ffec42e5c53d1ee36715cb301c9f7a49df369c10 5433 restricted/source/Sources.bz2
|
||||
f8a8d3194bfd3073eb5365aee9017dba4248b8ae 5858915 universe/binary-amd64/Packages.bz2
|
||||
5a5ab6b2c3e7b088ed634e511ef31790ebaa19c5 31726252 universe/binary-amd64/Packages
|
||||
88a688428705493357e9365c02d9b35bbd8ea436 7588885 universe/binary-amd64/Packages.gz
|
||||
23442a5ff84650eb5b8aa55eb48cf99739ab2109 100 universe/binary-amd64/Release
|
||||
1dd53cf7b076b36ded4970328eae3c752b69e9d3 5472750 universe/binary-arm64/Packages.bz2
|
||||
ee8b58d11e98aab06f2a9a6b8bd832c3b5cbefe4 7092987 universe/binary-arm64/Packages.gz
|
||||
f3d450291585a5929883a931aa56e8aedb7dc8da 100 universe/binary-arm64/Release
|
||||
370b28a02c766bbeb0ad0f64ee7a2971715ea928 29495907 universe/binary-arm64/Packages
|
||||
eb22893f878d10c8b95ce807e7affc9fe17c7ce2 7392868 universe/binary-armhf/Packages.gz
|
||||
b74532c990507393c0d0cc8d60e99fae617e5705 100 universe/binary-armhf/Release
|
||||
27f5b36f4d665de50f3a9c8158ef648ae6818d16 5709820 universe/binary-armhf/Packages.bz2
|
||||
dc20e20b8938a8fc6808fe44f50c3ada19fb144c 30858268 universe/binary-armhf/Packages
|
||||
0ebf261b432b6334f5ccebfc708a47c6c80a2cfc 31721739 universe/binary-i386/Packages
|
||||
a4264a379683d07c60e8491d687cac7752462df0 99 universe/binary-i386/Release
|
||||
36bb1e01e4bec63cc0535999b03cf11e047b6aa5 7597482 universe/binary-i386/Packages.gz
|
||||
b3bbc3275d94a86760f05972bdad558e42b1a1d4 5865806 universe/binary-i386/Packages.bz2
|
||||
56b8339260a276a20310a7bbab05145f0393198a 7432885 universe/binary-powerpc/Packages.gz
|
||||
76216f9e73a702cc09656d7450e7bd8929974904 5740380 universe/binary-powerpc/Packages.bz2
|
||||
7c8d4f40a8dbbcd520bd7d638259394345822b49 102 universe/binary-powerpc/Release
|
||||
17bd11b37898512e6a32ae8b63df27bf03cda9d4 31053897 universe/binary-powerpc/Packages
|
||||
6528975fe75aba4210624cf0b3efdca7381b61e3 5410980 universe/binary-ppc64el/Packages.bz2
|
||||
9bad3982ea78e1627c1a4069db08dec0b1c5c824 7014198 universe/binary-ppc64el/Packages.gz
|
||||
6d36f725c786a1264f5604b5c5a203f5508a4b57 29263935 universe/binary-ppc64el/Packages
|
||||
c4425981ddedde1f05d355c9b930da36b48bc977 102 universe/binary-ppc64el/Release
|
||||
a5675e1389176e8a4565b613643d44403c1c6996 16358 universe/debian-installer/binary-amd64/Packages.bz2
|
||||
f3a40cd0166e10e9c051d09bc13b7fdca5303f38 66510 universe/debian-installer/binary-amd64/Packages
|
||||
6f87181f8ce16b3242107973064f22e8b9843bcf 18642 universe/debian-installer/binary-amd64/Packages.gz
|
||||
231d0a0d1f90ab3b1e8c0e37a846dbcb438fa1c9 17173 universe/debian-installer/binary-arm64/Packages.gz
|
||||
286644d8a30617e2cdfd4d3baae9af74e27b3133 15166 universe/debian-installer/binary-arm64/Packages.bz2
|
||||
7204ec4b8437e46de049b2f3c01e5f80b69a2ece 61058 universe/debian-installer/binary-arm64/Packages
|
||||
245ee907a3b914e969ecc70d8cab799be806390e 19771 universe/debian-installer/binary-armhf/Packages.bz2
|
||||
1579023de7be2602bc54edac057a8d202625cfb6 87043 universe/debian-installer/binary-armhf/Packages
|
||||
bb8d551a66fa197334af1fedf46ba56991a363c9 23121 universe/debian-installer/binary-armhf/Packages.gz
|
||||
ffddca1a6ff3d36f97f20b213f02dcd6902cf4be 66419 universe/debian-installer/binary-i386/Packages
|
||||
e38716d2d6a949376c75a886e481b737c2ea3531 18628 universe/debian-installer/binary-i386/Packages.gz
|
||||
25378d61b299c2e37b4b54d1b8a7f6af1af11db9 16386 universe/debian-installer/binary-i386/Packages.bz2
|
||||
6c887d161df39748c6bcb09f37b4d1b5fe6ec5a8 65864 universe/debian-installer/binary-powerpc/Packages
|
||||
9d2d1072dde9aa5c3fecc26b13bb6ae4f3e5dddc 16188 universe/debian-installer/binary-powerpc/Packages.bz2
|
||||
2b3042db2b8215e815fa082f96a8c4e9446e0fac 18396 universe/debian-installer/binary-powerpc/Packages.gz
|
||||
9f7c673bf6609b6491ae051f97e39224c6f26390 61855 universe/debian-installer/binary-ppc64el/Packages
|
||||
2d41b90a711d22865fa53f99123e3b1413151945 17404 universe/debian-installer/binary-ppc64el/Packages.gz
|
||||
0c8ef5cd6eaaba69fd8dc3e8c1c9414769deeb9f 15319 universe/debian-installer/binary-ppc64el/Packages.bz2
|
||||
248f2e38ba3a5354fe987d481264cfe66ea823de 3129 universe/i18n/Index
|
||||
d03e3b687b4c667a984bd127dd38134e88786f3a 6398981 universe/source/Sources.bz2
|
||||
2ff835b149afa4af64fd7746342165a36a53e9d1 101 universe/source/Release
|
||||
070eeb003a4204bb131c147629629fb785865746 27857155 universe/source/Sources
|
||||
a2d77049814b31214eaca438e27b0d4ee89757f0 7925687 universe/source/Sources.gz
|
||||
SHA256:
|
||||
7524a3e2bdb7cbf7804a45a3320d463b250ddbfc8400f91e2f7536d9bed185b3 8234934 main/binary-amd64/Packages
|
||||
d665500cfc63fe3fb2819f4e32d7ad8ed939131984b7c4a571d47b96594614c4 96 main/binary-amd64/Release
|
||||
59fa3195fd15bb2860fad4ff9ed37b249035e05ee327bed18f95dc88a0a41eb9 1743009 main/binary-amd64/Packages.gz
|
||||
7095917eb8e4ac9161bc3b2ceeaf86e9265aae7b855a0e15d72096ecb05f1fc2 1350329 main/binary-amd64/Packages.bz2
|
||||
5244dcf65bab12c9b8153dc236b7740f816ccfd6630fec63633b3e6ffd8197cc 7558784 main/binary-arm64/Packages
|
||||
c49a433230d9b234bf360dc4909386c8624ce1e7be2826522b725ce8ec032d2b 96 main/binary-arm64/Release
|
||||
e0e86fc7e443214c5d98472833ea1b137ab6f57a98d5775ac66f9ad0a77c9e31 1250640 main/binary-arm64/Packages.bz2
|
||||
8890efae8740fcbdff91e281979fa8987a8b6267b8f4597130d9b97dac15f142 1611082 main/binary-arm64/Packages.gz
|
||||
b454d8463d1a493112d5da8fc2f3395c7221e1ef741dbe617603e95e23242a70 96 main/binary-armhf/Release
|
||||
e26f7a65c5e1fe2b5b8c07d615b1e766f49762cf8eeecfac2fb9542bfb15dc21 7860402 main/binary-armhf/Packages
|
||||
741451912114c0f721910eb15dbf98b28b9dfa7435a3293c241c5316769e4b57 1295158 main/binary-armhf/Packages.bz2
|
||||
7847283071c268aa95ec8c2e42e938f8e9100f9a862fa190a6f4df3506bbdd8f 1671757 main/binary-armhf/Packages.gz
|
||||
4984b26984b4e9e7de18c48e724e1bdd970868c84fc0e950e88f12592cd43501 95 main/binary-i386/Release
|
||||
fdfc38663915c5cef3029872deb8c3bf52b98092073058086e2f1db0c71ebeb4 1347897 main/binary-i386/Packages.bz2
|
||||
ecdc09eeb491223b406d04474835211bb708e63d8972ed4bdbd00eda57b7c305 1739448 main/binary-i386/Packages.gz
|
||||
d7b84573599f13c89744d091e6bcd8997056a5068e40f9876dd20805dc57342c 8205285 main/binary-i386/Packages
|
||||
69a3bae5e0bbe7711e22369c1cd80f4ffa78dfc1f4b66853b322b720327b57eb 7733542 main/binary-powerpc/Packages
|
||||
399a3e5546edb7d6856b19cdcdc7c5c07539d9adc4f1596a389f901f4b373086 1666061 main/binary-powerpc/Packages.gz
|
||||
3f68a13dc96c2ea071f5c2393d5cdfd59b12615ac7684b8132c28bec98001f7f 98 main/binary-powerpc/Release
|
||||
063c9d0da79882383c66c756aeb75f9f6c150af3893129e3c56f59b63dcb3bc1 1290478 main/binary-powerpc/Packages.bz2
|
||||
90d2c17be621ee085d08681d573d3a9dcccbe6becd8afe178b905938ce072692 1253972 main/binary-ppc64el/Packages.bz2
|
||||
21831d53e3cbd6e9b55e6d7f4c8fbc040eb3ff9df98d37c2c04148e7ebd25768 7578968 main/binary-ppc64el/Packages
|
||||
03d5495a8a3b5d5535147f2adde24ad0316f487db0ad6834797b4d8f2a496568 98 main/binary-ppc64el/Release
|
||||
51e591cdf458acc82946ca6262c84ff04d3422c20316cbd6f134fd3086300968 1615001 main/binary-ppc64el/Packages.gz
|
||||
44d5923cfcdb6109c617d01c38be4fa509c2d81269dfb0aefb390f514880d162 60753 main/debian-installer/binary-amd64/Packages.gz
|
||||
6f2c7d973ad2588ef1d09e62907e6d0f7da5b75ed6ca6f7be6583a1def574fb8 225667 main/debian-installer/binary-amd64/Packages
|
||||
a4022b5acc15ca52981c4910a542a0f75e6f70e8c8c387f1d4ad52c3fa469265 47239 main/debian-installer/binary-amd64/Packages.bz2
|
||||
a3e998fee7de1c78c7032a6fca1eb9624f5c4c568d98fe930cbdb66f1a863fd1 211920 main/debian-installer/binary-arm64/Packages
|
||||
321718411623d51158a24475a4f9ad3907b15abbc8c85f3b3341972093126132 45145 main/debian-installer/binary-arm64/Packages.bz2
|
||||
e734825d98090b59bf8b11b0d6290669f151734745b46dab234d34fda4b98d37 57576 main/debian-installer/binary-arm64/Packages.gz
|
||||
bec78e30698ee3917267f6815f9aeb9222253470b2e0cb6f97500844b1636e5f 61813 main/debian-installer/binary-armhf/Packages.gz
|
||||
81da5a5740d1d5600f57935859b4aadf077c17cb71c75584e43de3e4fc7d21ad 48283 main/debian-installer/binary-armhf/Packages.bz2
|
||||
dc3fac33fdf1073800c9707b408766aa8b6f0c24451fa69676102a4c211552f7 234956 main/debian-installer/binary-armhf/Packages
|
||||
de2afb93b175a7c300e677c6d30b63ef05eb10b5ce7404044deade04da1e541a 47141 main/debian-installer/binary-i386/Packages.bz2
|
||||
cee151a3684c64952094e3e3ee93a0cbdac0743c04588654d5a12fa2862881c2 225069 main/debian-installer/binary-i386/Packages
|
||||
dd2e00617923c2e7d5a95e2c39b7ba86609ef8536d195d4b894e9502dbd9abda 60622 main/debian-installer/binary-i386/Packages.gz
|
||||
9ff0d283d8f9d6812ac433fd0049bf0eb568cfd17f6369a6b140f12f3eb8ace5 74013 main/debian-installer/binary-powerpc/Packages.gz
|
||||
10030e138394faffae5a0c18f496eccb0fc8beff0a4d58950948f39b0e639166 300974 main/debian-installer/binary-powerpc/Packages
|
||||
efec97d820ddb6eca110414c61f7530e0a698f45f1503ca7b527600c93242bd9 56758 main/debian-installer/binary-powerpc/Packages.bz2
|
||||
8ad220f71c28e852f9845f9b141ae8a92d9814ac553bd16e8f8d8342c44c7e9e 58701 main/debian-installer/binary-ppc64el/Packages.gz
|
||||
d682f966ff09d2794e57b251c1c1ca32518e31f7a10e014dd25ab65a2b22c877 216539 main/debian-installer/binary-ppc64el/Packages
|
||||
a014cec2a75d7d969c1ae8cc81520a54a2da964356622bf9e0474b625ed74273 45829 main/debian-installer/binary-ppc64el/Packages.bz2
|
||||
f6a57edeb0e0958c2871b4bc76d2b6e34402a98f5a95e34bef40dc98f7a3000e 3632 main/i18n/Index
|
||||
1aee2ba4c77723c46442e4d8e252dde6bc9d57ac5ea30f416cfe19f0bf4b37b7 1064355 main/source/Sources.bz2
|
||||
699ff5b32df8cc50111e8114343d81dfb7fc7a13b55ff91e5d4c9d419f942a83 97 main/source/Release
|
||||
1f493ef03687b21b48489c51a22515c26529d41428f1b8ce51eff8d4b23ea221 5000095 main/source/Sources
|
||||
48bb4325d7cdc51a121c6df0a2f5efc7b1cb846860c87d27d40dd1a6f21cfe3b 1334581 main/source/Sources.gz
|
||||
a811c69f39ee5bf05a08d2caed867df702793cbe6d7248a90d2b45e215f385de 102 multiverse/binary-amd64/Release
|
||||
d1e77818ece56ef9dfd05bd4733c1f7046f40c938dde2219857fb56faa6dcfa4 132333 multiverse/binary-amd64/Packages.bz2
|
||||
27ab1308ce918e5253f9f9e15c6b7ccdd36e9794da355b763845b13a09873530 169243 multiverse/binary-amd64/Packages.gz
|
||||
007b36a17ba7027e4f74991671eabe03fe6bac12f6131b3d5583fc1e37ba35df 663770 multiverse/binary-amd64/Packages
|
||||
57edbea7326d86b1c8977cbc464703d703b823cdcf8570378ede8acaf730c512 138708 multiverse/binary-arm64/Packages.gz
|
||||
ca09df8c8d052c7d2d20de212ba4d0e2d44e15fe7252f9d063d3e391a3a9afb0 531113 multiverse/binary-arm64/Packages
|
||||
82d94a78228e9bf9633a211670518f62df7393db0ead0f1851da16d98e9a0f29 108957 multiverse/binary-arm64/Packages.bz2
|
||||
d7c2130468717cb758509d34d09fc81c030711b7e82d6241e76c43e656a5d0ec 102 multiverse/binary-arm64/Release
|
||||
4303ffbdc5b3c4c5ba622ab5c9e350fbf3d8d738c932487a8300722669b348cf 111514 multiverse/binary-armhf/Packages.bz2
|
||||
abb737c5e8b4af4fc262ddbe72de2f03f580c7b07a01f338a0898164108534df 142115 multiverse/binary-armhf/Packages.gz
|
||||
ca0399b11d398d15aa23ba7890ed5de9ebec6cb39e04c66ac3d6d6bda0815154 102 multiverse/binary-armhf/Release
|
||||
911b87a408d12c237865a4c13870ca3c584f64e7feaf20801ee15c58f51cc69f 545287 multiverse/binary-armhf/Packages
|
||||
b354250c1def9847159094d9061f8cf10ccedcd306ea5c3b688d685852e98761 172036 multiverse/binary-i386/Packages.gz
|
||||
37302670125eee8135902790274d6478e9ff3f1d30f21a0e917368743feae233 673626 multiverse/binary-i386/Packages
|
||||
cfe5b4724d8cc36f72722b908d249a3d4dc4ca95bdc4d51e200a3bc9dd4936dc 134298 multiverse/binary-i386/Packages.bz2
|
||||
4e0ccdbda232003fe1759bc6a9d829e002c846e0e8062ae00da07ea0b827fde2 101 multiverse/binary-i386/Release
|
||||
43a5396e7cb5f18d84564528cc23cb9488caf59c334638c01964ed710415ee19 559226 multiverse/binary-powerpc/Packages
|
||||
11f3c9d6b6a74e701bcbff3dd470516832188e881ec3c894faf440956d4b3019 145768 multiverse/binary-powerpc/Packages.gz
|
||||
51509ed54958a561ba53bb24140453ff2132c91f5f478f4e5d8ebabf3b78d4b3 104 multiverse/binary-powerpc/Release
|
||||
ac26f9badf8e8092cf1580736e634629ca31aca767fb59a8e0f7fcfbd86a8cd6 114089 multiverse/binary-powerpc/Packages.bz2
|
||||
878e659371869cb07151d567028f1bc5ac955fb02fe6d5501cc45bc24aede958 515410 multiverse/binary-ppc64el/Packages
|
||||
8afdbd382cfddd3bfd8a4e0d6407d3143318308a4153372bfeb67ae3fda10505 135313 multiverse/binary-ppc64el/Packages.gz
|
||||
d9316697f1da2a094dd1bfeb7d15733c2b4da028f800f2f07bc72d7177a557c5 106684 multiverse/binary-ppc64el/Packages.bz2
|
||||
d331064d4a5a75735d74855ddcff164064ac0c70f1fd695e886d30ee3dff8627 104 multiverse/binary-ppc64el/Release
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 multiverse/debian-installer/binary-amd64/Packages
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 multiverse/debian-installer/binary-amd64/Packages.gz
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 multiverse/debian-installer/binary-amd64/Packages.bz2
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 multiverse/debian-installer/binary-arm64/Packages
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 multiverse/debian-installer/binary-arm64/Packages.gz
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 multiverse/debian-installer/binary-arm64/Packages.bz2
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 multiverse/debian-installer/binary-armhf/Packages.gz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 multiverse/debian-installer/binary-armhf/Packages
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 multiverse/debian-installer/binary-armhf/Packages.bz2
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 multiverse/debian-installer/binary-i386/Packages.gz
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 multiverse/debian-installer/binary-i386/Packages.bz2
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 multiverse/debian-installer/binary-i386/Packages
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 multiverse/debian-installer/binary-powerpc/Packages.bz2
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 multiverse/debian-installer/binary-powerpc/Packages
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 multiverse/debian-installer/binary-powerpc/Packages.gz
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 multiverse/debian-installer/binary-ppc64el/Packages.bz2
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 multiverse/debian-installer/binary-ppc64el/Packages.gz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 multiverse/debian-installer/binary-ppc64el/Packages
|
||||
79b5d1f51ae02e2b6f48528da251fadb1d6a1eee9c7b967ffdabb00c102effc7 2537 multiverse/i18n/Index
|
||||
1ff20290647ec8fca778880a70148d9b09376fd8bf955baad37953155828c6af 711248 multiverse/source/Sources
|
||||
220403f1cf1ad88541164de58cc2694b87556c5644f3d05306c12e972ac60599 211094 multiverse/source/Sources.gz
|
||||
6c956bdc8a59ad6f7d6663b53d9cd4bee6db40f7c9887fd9dbdb37a585e03740 173561 multiverse/source/Sources.bz2
|
||||
6cae77b968a328ded9245b67b4b0e347447f1a95fe7821f90ecbe6181ee80d3c 103 multiverse/source/Release
|
||||
70c1a1a7f23705c79e23696fd535a187bc2864795fb822b897295a5590db91a6 184141 restricted/binary-amd64/Packages
|
||||
dea397983db22cbb24ec4504a56712b57bc49596faae193504ab393db57d0fc3 15974 restricted/binary-amd64/Packages.gz
|
||||
9a63fb2a5eb64ec3167c79bc3da66ab79ab7c3867c1e7dcce9131fcec447553c 102 restricted/binary-amd64/Release
|
||||
e8f1e0f93b842c42c9236ba72d5eb18ac60017b64d5fec29009c8ad8f16a6aaf 13028 restricted/binary-amd64/Packages.bz2
|
||||
d42a895f41c8dd189623a3be7e778f925f6f4d2b9e9551e63b4006e9577ce128 102 restricted/binary-arm64/Release
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 restricted/binary-arm64/Packages.gz
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 restricted/binary-arm64/Packages.bz2
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 restricted/binary-arm64/Packages
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 restricted/binary-armhf/Packages.bz2
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 restricted/binary-armhf/Packages.gz
|
||||
495182a10858eef92c224330fdbc64ef48a86d08b462043bc41140526158c716 102 restricted/binary-armhf/Release
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 restricted/binary-armhf/Packages
|
||||
e6e4a4ee34e8dd96ddd6a60bc890ac69bfa4b190d39356223711e7f761eb4090 16421 restricted/binary-i386/Packages.gz
|
||||
25a6e9ac8545df4a33693fc73bf9a561e718c68a8b487ab38539899ca327872b 185074 restricted/binary-i386/Packages
|
||||
df128768f2525c928168acc7ea3761b447139c7f7e8f213c447783e7fae75845 101 restricted/binary-i386/Release
|
||||
0d48f2164d9bc9c9e56ad67d01ffb5194e6ae5e2e8a7e3e26e4d428ce70d32d6 13418 restricted/binary-i386/Packages.bz2
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 restricted/binary-powerpc/Packages.bz2
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 restricted/binary-powerpc/Packages.gz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 restricted/binary-powerpc/Packages
|
||||
6112df9650e10678af3b56a31c0d75b766874b39d81126c3673d50b520bc297e 104 restricted/binary-powerpc/Release
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 restricted/binary-ppc64el/Packages.gz
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 restricted/binary-ppc64el/Packages.bz2
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 restricted/binary-ppc64el/Packages
|
||||
09a4c0635eece8dd4fa7bab71eeefa2ac9070bce364187b405eba05a1e1020b4 104 restricted/binary-ppc64el/Release
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 restricted/debian-installer/binary-amd64/Packages
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 restricted/debian-installer/binary-amd64/Packages.bz2
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 restricted/debian-installer/binary-amd64/Packages.gz
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 restricted/debian-installer/binary-arm64/Packages.bz2
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 restricted/debian-installer/binary-arm64/Packages.gz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 restricted/debian-installer/binary-arm64/Packages
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 restricted/debian-installer/binary-armhf/Packages.gz
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 restricted/debian-installer/binary-armhf/Packages.bz2
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 restricted/debian-installer/binary-armhf/Packages
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 restricted/debian-installer/binary-i386/Packages.bz2
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 restricted/debian-installer/binary-i386/Packages
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 restricted/debian-installer/binary-i386/Packages.gz
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 restricted/debian-installer/binary-powerpc/Packages.gz
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 restricted/debian-installer/binary-powerpc/Packages.bz2
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 restricted/debian-installer/binary-powerpc/Packages
|
||||
d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058 14 restricted/debian-installer/binary-ppc64el/Packages.bz2
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 restricted/debian-installer/binary-ppc64el/Packages
|
||||
e7ab72b8f37c7c9c9f6386fb8e3dfa40bf6fe4b67876703c5927e47cb8664ce4 40 restricted/debian-installer/binary-ppc64el/Packages.gz
|
||||
519ffc80933b1b5bc3bcc719abd0fbb2b99f600cc3cf404e3721bca760fd9af8 2797 restricted/i18n/Index
|
||||
8103fc3b9ef64a894b2698e2699e572ffec45568f7bcf39843e544c647a0a568 103 restricted/source/Release
|
||||
ed59048d5ad54f840cf6d167ed5d54406ee24612294a9601266e3469fd7da5bc 22871 restricted/source/Sources
|
||||
8cdc8cd1e58e37d84bcc37db13881c148e69c5d78dfff09fa61353eceefba3c3 5335 restricted/source/Sources.gz
|
||||
b062fcf3d7074983290d0087878248f84a7462d281d3eb656ff62b6355b06109 5433 restricted/source/Sources.bz2
|
||||
558637eeb8e340b871653e2060effe36e064677eca4eae62d9e4138dd402a610 5858915 universe/binary-amd64/Packages.bz2
|
||||
980057378f5ae0c52872747f92720bf95b819f2a28f573abbb77b99397e67a34 31726252 universe/binary-amd64/Packages
|
||||
6790fe3c98860e2de6b263fc6d988f017e0f41f86180e9fe8cd4a6951eb1086e 7588885 universe/binary-amd64/Packages.gz
|
||||
ecbac6e48c4a0e4e399c45cb8abbb3664dc5e32791059c3327f49558e8be0252 100 universe/binary-amd64/Release
|
||||
c0ee673e644f756ec9895ffbe9947970c1953a672b1605b32b74d9f94764fcd4 5472750 universe/binary-arm64/Packages.bz2
|
||||
6cfc169a03d329a241e5982b647379f038b7b9963a3c00e779a114794c889887 7092987 universe/binary-arm64/Packages.gz
|
||||
14bd320d65f42c88494c0a68a8e9857a157e9ba72a967ee239589ea404c35a94 100 universe/binary-arm64/Release
|
||||
233a8f833cb428bc1937145500e81f5c02917fd2676ca272730507c11a03bc38 29495907 universe/binary-arm64/Packages
|
||||
6e57e09e9114ee317ec47646c4732d85b01be63e9f3f9faa763af5cc3eca33c4 7392868 universe/binary-armhf/Packages.gz
|
||||
25841f79fa7d4154d9637c53dd032022b3b35709322ac08766f02d8148534d3b 100 universe/binary-armhf/Release
|
||||
0b1fb98deefc18dd137f7baf56b34763a5c6709d23dde735a6b7f1f93741d03a 5709820 universe/binary-armhf/Packages.bz2
|
||||
0f28c70c157757aca28e321c4499d869196b364b34a62d1666ed44b0517f7f76 30858268 universe/binary-armhf/Packages
|
||||
481db8cae14f392640fa069510e12664050e7e765a64274b5228e0b14f0b19ef 31721739 universe/binary-i386/Packages
|
||||
8856390e23718c08d5732cff8f5193e63330e9ab606be99bafae023e3f6c6b84 99 universe/binary-i386/Release
|
||||
401498e9d221a72be691a40e12f5997249dea985d7b6b7ac410008214024585f 7597482 universe/binary-i386/Packages.gz
|
||||
2afcf259332d88c5e02f5446c4926edd567ef1a00ce24ca7cb400cbf44e2a90f 5865806 universe/binary-i386/Packages.bz2
|
||||
7d906a94492d62f82ff8a88f99212a2e1df9df7d172f1ef9fca9272b4d9e4cc9 7432885 universe/binary-powerpc/Packages.gz
|
||||
5c11393f03e141cdce99f518521a3695590f73b02d60a10afa747252f0cefbb8 5740380 universe/binary-powerpc/Packages.bz2
|
||||
319e5f90b0bfee39d98e0da36882f516fbfb694854bc4a9bef8169e9f4e93bd7 102 universe/binary-powerpc/Release
|
||||
b17339c599aa7017ca1f62a19ae1d67a1c5e4afd15562edfe382c03de81693ea 31053897 universe/binary-powerpc/Packages
|
||||
a671b092eba30e49f72a96e72e7a855f6bed0fbcf911585391c90e460350890f 5410980 universe/binary-ppc64el/Packages.bz2
|
||||
6c952f786a3562dfee4b305d0459b573e11075263a7d1d13305e88835e56f0ff 7014198 universe/binary-ppc64el/Packages.gz
|
||||
d228031c5fb8e7d3423d55ebb76b24317992c359f56d738571c1e1418622915e 29263935 universe/binary-ppc64el/Packages
|
||||
5b4d63bd3db2ae8033348ffb18a66813c18905f07ae72bea010becf96472333c 102 universe/binary-ppc64el/Release
|
||||
b6ed67fc5cc439498bfca7a865a949dfa1e9156d1cc42eb9f538d8b2f9a3326d 16358 universe/debian-installer/binary-amd64/Packages.bz2
|
||||
e72b19e24d41e28e74e7e47f0138e9c1b37a50fa2881f202aaac25a038e09fcb 66510 universe/debian-installer/binary-amd64/Packages
|
||||
66fc759b0df389b39fad9ad50e71f70cbf67514a609cd2a0127210765b04ee3f 18642 universe/debian-installer/binary-amd64/Packages.gz
|
||||
ad06fbef1e63a9e48eb18a4910893e4a9ea26ba5386cf0afe59bf607b29805e0 17173 universe/debian-installer/binary-arm64/Packages.gz
|
||||
f1dcfdafa6e1d88fe4b75a8f82bb9589e41efa444ee12ba06c90c3a0eccbb19a 15166 universe/debian-installer/binary-arm64/Packages.bz2
|
||||
1c8f0041aa233dbc8ad19f1a5fee29307af9044cd1b88e5cd3d3d4df2d031c6e 61058 universe/debian-installer/binary-arm64/Packages
|
||||
79e8ffecc207f5818545020c53f69d500fca1e61e191c33f06b674beb553befa 19771 universe/debian-installer/binary-armhf/Packages.bz2
|
||||
c037118c3ba2ac9a041890afea8d4934f6f8acd9f534f76ab5a75eb160c5e302 87043 universe/debian-installer/binary-armhf/Packages
|
||||
68f1f5cb98a871fdac716c184119c7d03be72515fe0988aaf7ae97133628c965 23121 universe/debian-installer/binary-armhf/Packages.gz
|
||||
14c037d2c4edb063f3b73ac200ba953c9594705769b42d59a19169405ee980f3 66419 universe/debian-installer/binary-i386/Packages
|
||||
3d1bdc1e08615e1abea21e623ad21dad846929572d407ca6063f5f391415fd79 18628 universe/debian-installer/binary-i386/Packages.gz
|
||||
34accd8f4ecb0505eb967d8d1459bfc95029e65783844cd55f4b08a0dc136dd0 16386 universe/debian-installer/binary-i386/Packages.bz2
|
||||
917d93ba2ec6a724f90d62bceabe7af70b0a776eb1e869f05856e81061e4de50 65864 universe/debian-installer/binary-powerpc/Packages
|
||||
d38ce6270702de3953c7dae2a12dfa2b6035c87d9053d2edcc8f60276c310d14 16188 universe/debian-installer/binary-powerpc/Packages.bz2
|
||||
1f162dd562792e02c005b50999f90a105cfe7ee04860f8dad2b6cba76d169fd3 18396 universe/debian-installer/binary-powerpc/Packages.gz
|
||||
e4839ef17717cb7fd91d58000328f83a2ad1225f584d8288232ccbd65d57ff27 61855 universe/debian-installer/binary-ppc64el/Packages
|
||||
9af3cd4c4ed189ac761ff63fe3db10348094595db162ce010d979167ebf54d0b 17404 universe/debian-installer/binary-ppc64el/Packages.gz
|
||||
11b698b0fca6adaaa644e295ae906b9b220ab9ca0fda28e610b7480c7c14ebad 15319 universe/debian-installer/binary-ppc64el/Packages.bz2
|
||||
c753f2ee685a08382fd2e9e3916f77a08042403e38144bb81583b7a81ff0a36f 3129 universe/i18n/Index
|
||||
dbe17a8aca33867c911744ead025dccb995d7b38766eede1b23e740125a5d5c8 6398981 universe/source/Sources.bz2
|
||||
a5960643d4d37311f99b727db4a97b6c8799150e9085106d8c3e41ba46904084 101 universe/source/Release
|
||||
6b52973d75361b5dd2a21f6f50ef5d5d0dcdfdc1d812fdc35759447386f8e767 27857155 universe/source/Sources
|
||||
7525b15b01621ed8321dcae7754eeb42b8e12055bb1f8ed367d4630d49a06357 7925687 universe/source/Sources.gz
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1
|
||||
|
||||
iQIcBAABCAAGBQJZMXlSAAoJEItIrWJGklVTqvMQAI5QhCqVDGt4MOr3Ee4RnUOV
|
||||
mpCeWo1IOg1jNQDF4AgVgWAgftA1D9meMvr7L9qnkIlzKuc7M5eWlG1fb3sH9aW1
|
||||
lfW8AXZ+O7k1g8G0XcVBEPD+jyoSrA5/JVWSgczdFbTNf+4zP7b12ZFVVe+iB2mM
|
||||
L8K9Q2WEqiq4DiC9OiT+qistlycAWvoAp+Aen1XSttg65GBvvOyMo55IBGqCZhyy
|
||||
u92jMGRAXYU05xt3TKheoxGIbNWiDVXcjflzNgjzMQBH7I5jG/7wK8qGWXf7a5q5
|
||||
aA2wyM8q/xjrJ/UDLmEFGHsu4xF6XK88+86leDRU5k+FmODqvZ2foMWWx4Dx9oGt
|
||||
i/RZofODkVeoW5sPXeK4db13feHpDIh6GreML1HIsLOzkyuZW4+TsP5PWOud3EZZ
|
||||
RoM1wI/p7W3sDtglcOqW+vhrWDpM+E0oTOid4NHenN/YTmoIdTcrIvCNy4lsqndd
|
||||
9JEpd622MzbkQBLi6W0e3+UzR9na5ueA6UQRElRt9G7vE2FHtAuRB0+KQ1Xlqofb
|
||||
2DlM/KSt9CugtP8vu+L0LckG8MSTkxhFc6/cUNDChW3jDjb/0W96PPTt5W+JUkoP
|
||||
DXbvt4Up3Apl+TLp765Gkg0x8rgjayRsqK8Y9/qHKhYmZng9Ssqrc2YqqzMHYbFk
|
||||
nZhCZNH3wF4puNKwt2bDiQIcBAABCAAGBQJZMXlSAAoJEHY40EQrkNAQqvMQAJeJ
|
||||
aT4n9VjVrmy8q+0QYm7mTHHgoBXyfkWcOtci4ABqJNHNL85SqlBKtdVZg03RmQy8
|
||||
9RUV8lgFSjKTOhs7eDw0qfoHWejqoLTwn56aPUjLbmsLacIvaOTqi45/kykBoGFx
|
||||
yAkFev1K1EF1/ysyDhcCSoA4C4MoozbDHvI6mQt8/9WBeu4kB7z+/u2vKmYm7zO7
|
||||
50KZRGoyvsowrIHJkm5sloJ0rJ748nkg09HD+810EUznAhnyk5ZuiBLzPp0m0yvc
|
||||
lN+dho68loUEFir/vIxmdlYbVRVuGXjxTD0NpSxfbpR6klK6qdwttf+7C7yZJHUo
|
||||
FOx+vxXnYuDSKts6E6BmhOFzJ4VYiyQEp4ywrycO5I5MKBaPFUkiQSUcGpdwLyhd
|
||||
C3gD7cTyZvn3txf+pwEFHIiYUaVi8PviPthVYuUEC5hMVuv0aG9KeMXj8ZerV50J
|
||||
AQvBDQRbAUc3/YBJoD3+CmI6tSo1GHAvQw10AqKbYrZWvLisbI3kMEHYGwaky/2z
|
||||
ms3wTCwAs1FzT/FwsJO3FOyegmF8Zw+XKkZjLktjXzycHq6jJ1XGJZwSHztUKqL8
|
||||
mz1BxbReGd5LmtLB/dw7mVQAxSkDipmOlJYg3a3tcwpRrvZXUlUVflHsoDi0kZFC
|
||||
l4eAX0QjLo6yP2SIwLt3B2kGLgB5Ct9KsuhPJZri
|
||||
=n7Rh
|
||||
-----END PGP SIGNATURE-----
|
||||
+1791
File diff suppressed because it is too large
Load Diff
+3
-3
@@ -72,7 +72,7 @@ func (g *GpgSigner) gpgArgs() []string {
|
||||
}
|
||||
|
||||
if g.batch {
|
||||
args = append(args, "--no-tty")
|
||||
args = append(args, "--no-tty", "--batch")
|
||||
}
|
||||
|
||||
return args
|
||||
@@ -241,7 +241,7 @@ func (g *GpgVerifier) runGpgv(args []string, context string, showKeyTip bool) (*
|
||||
}
|
||||
|
||||
// VerifyDetachedSignature verifies combination of signature and cleartext using gpgv
|
||||
func (g *GpgVerifier) VerifyDetachedSignature(signature, cleartext io.Reader) error {
|
||||
func (g *GpgVerifier) VerifyDetachedSignature(signature, cleartext io.Reader, showKeyTip bool) error {
|
||||
args := g.argsKeyrings()
|
||||
|
||||
sigf, err := ioutil.TempFile("", "aptly-gpg")
|
||||
@@ -269,7 +269,7 @@ func (g *GpgVerifier) VerifyDetachedSignature(signature, cleartext io.Reader) er
|
||||
}
|
||||
|
||||
args = append(args, sigf.Name(), clearf.Name())
|
||||
_, err = g.runGpgv(args, "detached signature", true)
|
||||
_, err = g.runGpgv(args, "detached signature", showKeyTip)
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
+477
@@ -0,0 +1,477 @@
|
||||
package pgp
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"golang.org/x/crypto/openpgp"
|
||||
"golang.org/x/crypto/openpgp/clearsign"
|
||||
openpgp_errors "golang.org/x/crypto/openpgp/errors"
|
||||
"golang.org/x/crypto/openpgp/packet"
|
||||
"golang.org/x/crypto/ssh/terminal"
|
||||
)
|
||||
|
||||
// Test interface
|
||||
var (
|
||||
_ Signer = &GoSigner{}
|
||||
_ Verifier = &GoVerifier{}
|
||||
)
|
||||
|
||||
// Internal errors
|
||||
var (
|
||||
errWrongPasshprase = errors.New("unable to decrypt the key, passphrase is wrong")
|
||||
)
|
||||
|
||||
// GoSigner is implementation of Signer interface using Go internal OpenPGP library
|
||||
type GoSigner struct {
|
||||
keyRef string
|
||||
keyringFile, secretKeyringFile string
|
||||
passphrase, passphraseFile string
|
||||
batch bool
|
||||
|
||||
publicKeyring openpgp.EntityList
|
||||
secretKeyring openpgp.EntityList
|
||||
signer *openpgp.Entity
|
||||
signerConfig *packet.Config
|
||||
}
|
||||
|
||||
// SetBatch controls whether we allowed to interact with user
|
||||
func (g *GoSigner) SetBatch(batch bool) {
|
||||
g.batch = batch
|
||||
}
|
||||
|
||||
// SetKey sets key ID to use when signing files
|
||||
func (g *GoSigner) SetKey(keyRef string) {
|
||||
g.keyRef = keyRef
|
||||
}
|
||||
|
||||
// SetKeyRing allows to set custom keyring and secretkeyring
|
||||
func (g *GoSigner) SetKeyRing(keyring, secretKeyring string) {
|
||||
g.keyringFile, g.secretKeyringFile = keyring, secretKeyring
|
||||
}
|
||||
|
||||
// SetPassphrase sets passhprase params
|
||||
func (g *GoSigner) SetPassphrase(passphrase, passphraseFile string) {
|
||||
g.passphrase, g.passphraseFile = passphrase, passphraseFile
|
||||
}
|
||||
|
||||
// Init verifies availability of gpg & presence of keys
|
||||
func (g *GoSigner) Init() error {
|
||||
g.signerConfig = &packet.Config{
|
||||
DefaultCompressionAlgo: packet.CompressionZLIB,
|
||||
CompressionConfig: &packet.CompressionConfig{
|
||||
Level: 9,
|
||||
},
|
||||
}
|
||||
|
||||
if g.passphraseFile != "" {
|
||||
passF, err := os.Open(g.passphraseFile)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error opening passphrase file")
|
||||
}
|
||||
defer passF.Close()
|
||||
|
||||
contents, err := ioutil.ReadAll(passF)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error reading passphrase file")
|
||||
}
|
||||
|
||||
g.passphrase = strings.TrimSpace(string(contents))
|
||||
}
|
||||
|
||||
if g.keyringFile == "" {
|
||||
g.keyringFile = "pubring.gpg"
|
||||
}
|
||||
|
||||
if g.secretKeyringFile == "" {
|
||||
g.secretKeyringFile = "secring.gpg"
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
g.publicKeyring, err = loadKeyRing(g.keyringFile, false)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error loading public keyring")
|
||||
}
|
||||
|
||||
g.secretKeyring, err = loadKeyRing(g.secretKeyringFile, false)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error load secret keyring")
|
||||
}
|
||||
|
||||
if len(g.secretKeyring) == 0 {
|
||||
return fmt.Errorf("looks like there are no keys in gpg, please create one (official manual: http://www.gnupg.org/gph/en/manual.html)")
|
||||
}
|
||||
|
||||
if g.keyRef == "" {
|
||||
// no key reference, pick the first key
|
||||
g.signer = g.secretKeyring[0]
|
||||
} else {
|
||||
pickKeyLoop:
|
||||
for _, signer := range g.secretKeyring {
|
||||
key := KeyFromUint64(signer.PrimaryKey.KeyId)
|
||||
if key.Matches(Key(g.keyRef)) {
|
||||
g.signer = signer
|
||||
break
|
||||
}
|
||||
|
||||
for name := range signer.Identities {
|
||||
if strings.Contains(name, g.keyRef) {
|
||||
g.signer = signer
|
||||
break pickKeyLoop
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if g.signer == nil {
|
||||
return errors.Errorf("couldn't find key for key reference %v", g.keyRef)
|
||||
}
|
||||
}
|
||||
|
||||
if g.signer.PrivateKey.Encrypted {
|
||||
i := 0
|
||||
for name := range g.signer.Identities {
|
||||
if i == 0 {
|
||||
fmt.Printf("openpgp: Passphrase is required to unlock private key \"%s\"\n", name)
|
||||
} else {
|
||||
fmt.Printf(" aka \"%s\"\n", name)
|
||||
}
|
||||
i++
|
||||
}
|
||||
|
||||
if g.passphrase == "" {
|
||||
if g.batch {
|
||||
return errors.New("key is locked with passphrase, but no passphrase was given in batch mode")
|
||||
}
|
||||
|
||||
for attempt := 0; attempt < 3; attempt++ {
|
||||
fmt.Print("\nEnter passphrase: ")
|
||||
var bytePassphrase []byte
|
||||
bytePassphrase, err = terminal.ReadPassword(int(syscall.Stdin))
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error reading passphare")
|
||||
}
|
||||
|
||||
g.passphrase = string(bytePassphrase)
|
||||
|
||||
err = g.decryptKey()
|
||||
if err == nil || err != errWrongPasshprase {
|
||||
break
|
||||
}
|
||||
|
||||
fmt.Print("\nWrong passphrase, please try again.\n")
|
||||
}
|
||||
} else {
|
||||
err = g.decryptKey()
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (g *GoSigner) decryptKey() error {
|
||||
err := g.signer.PrivateKey.Decrypt([]byte(g.passphrase))
|
||||
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
if e, ok := err.(openpgp_errors.StructuralError); ok {
|
||||
if string(e) == "private key checksum failure" {
|
||||
return errWrongPasshprase
|
||||
}
|
||||
}
|
||||
|
||||
return errors.Wrap(err, "error unlocking private key")
|
||||
}
|
||||
|
||||
// DetachedSign signs file with detached signature in ASCII format
|
||||
func (g *GoSigner) DetachedSign(source string, destination string) error {
|
||||
fmt.Printf("openpgp: signing file '%s'...\n", filepath.Base(source))
|
||||
|
||||
message, err := os.Open(source)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error opening source file")
|
||||
}
|
||||
defer message.Close()
|
||||
|
||||
signature, err := os.Create(destination)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error creating signature file")
|
||||
}
|
||||
defer signature.Close()
|
||||
|
||||
err = openpgp.ArmoredDetachSign(signature, g.signer, message, g.signerConfig)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error creating detached signature")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ClearSign clear-signs the file
|
||||
func (g *GoSigner) ClearSign(source string, destination string) error {
|
||||
fmt.Printf("openpgp: clearsigning file '%s'...\n", filepath.Base(source))
|
||||
|
||||
message, err := os.Open(source)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error opening source file")
|
||||
}
|
||||
defer message.Close()
|
||||
|
||||
clearsigned, err := os.Create(destination)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error creating clearsigned file")
|
||||
}
|
||||
defer clearsigned.Close()
|
||||
|
||||
stream, err := clearsign.Encode(clearsigned, g.signer.PrivateKey, g.signerConfig)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error initializing clear signer")
|
||||
}
|
||||
|
||||
_, err = io.Copy(stream, message)
|
||||
if err != nil {
|
||||
stream.Close()
|
||||
return errors.Wrap(err, "error generating clearsigned signature")
|
||||
}
|
||||
|
||||
err = stream.Close()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error generating clearsigned signature")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GoVerifier is implementation of Verifier interface using Go internal OpenPGP library
|
||||
type GoVerifier struct {
|
||||
keyRingFiles []string
|
||||
|
||||
trustedKeyring openpgp.EntityList
|
||||
}
|
||||
|
||||
// InitKeyring verifies that gpg is installed and some keys are trusted
|
||||
func (g *GoVerifier) InitKeyring() error {
|
||||
var err error
|
||||
|
||||
if len(g.keyRingFiles) == 0 {
|
||||
g.trustedKeyring, err = loadKeyRing("trustedkeys.gpg", true)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failure loading trustedkeys.gpg keyring")
|
||||
}
|
||||
} else {
|
||||
for _, file := range g.keyRingFiles {
|
||||
var keyring openpgp.EntityList
|
||||
|
||||
keyring, err = loadKeyRing(file, false)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "failure loading %s keyring", file)
|
||||
}
|
||||
|
||||
g.trustedKeyring = append(g.trustedKeyring, keyring...)
|
||||
}
|
||||
}
|
||||
|
||||
if len(g.trustedKeyring) == 0 {
|
||||
fmt.Printf("\nLooks like your keyring with trusted keys is empty. You might consider importing some keys.\n")
|
||||
if len(g.keyRingFiles) == 0 {
|
||||
// using default keyring
|
||||
fmt.Printf("If you're running Debian or Ubuntu, it's a good idea to import current archive keys by running:\n\n")
|
||||
fmt.Printf(" gpg --no-default-keyring --keyring /usr/share/keyrings/debian-archive-keyring.gpg --export | gpg --no-default-keyring --keyring trustedkeys.gpg --import\n")
|
||||
fmt.Printf("\n(for Ubuntu, use /usr/share/keyrings/ubuntu-archive-keyring.gpg)\n\n")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddKeyring adds custom keyrings to the list
|
||||
func (g *GoVerifier) AddKeyring(keyring string) {
|
||||
g.keyRingFiles = append(g.keyRingFiles, keyring)
|
||||
}
|
||||
|
||||
func (g *GoVerifier) showImportKeyTip(signers []signatureResult) {
|
||||
if len(g.keyRingFiles) == 0 {
|
||||
fmt.Printf("\nLooks like some keys are missing in your trusted keyring, you may consider importing them from keyserver:\n\n")
|
||||
|
||||
keys := make([]string, 0)
|
||||
|
||||
for _, signer := range signers {
|
||||
if signer.Entity != nil {
|
||||
continue
|
||||
}
|
||||
keys = append(keys, string(KeyFromUint64(signer.IssuerKeyID)))
|
||||
}
|
||||
|
||||
fmt.Printf("gpg --no-default-keyring --keyring trustedkeys.gpg --keyserver keys.gnupg.net --recv-keys %s\n\n",
|
||||
strings.Join(keys, " "))
|
||||
|
||||
fmt.Printf("Sometimes keys are stored in repository root in file named Release.key, to import such key:\n\n")
|
||||
fmt.Printf("wget -O - https://some.repo/repository/Release.key | gpg --no-default-keyring --keyring trustedkeys.gpg --import\n\n")
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GoVerifier) printLog(signers []signatureResult) {
|
||||
for _, signer := range signers {
|
||||
fmt.Printf("openpgp: Signature made %s using %s key ID %s\n",
|
||||
signer.CreationTime.Format(time.RFC1123),
|
||||
pubkeyAlgorithmName(signer.PubKeyAlgo),
|
||||
KeyFromUint64(signer.IssuerKeyID))
|
||||
|
||||
if signer.Entity != nil {
|
||||
i := 0
|
||||
for name := range signer.Entity.Identities {
|
||||
if i == 0 {
|
||||
fmt.Printf("openpgp: Good signature from \"%s\"\n", name)
|
||||
} else {
|
||||
fmt.Printf(" aka \"%s\"\n", name)
|
||||
}
|
||||
i++
|
||||
}
|
||||
} else {
|
||||
fmt.Printf("openpgp: Can't check signature: public key not found\n")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// VerifyDetachedSignature verifies combination of signature and cleartext using gpgv
|
||||
func (g *GoVerifier) VerifyDetachedSignature(signature, cleartext io.Reader, showKeyTip bool) error {
|
||||
signers, missingKeys, err := checkArmoredDetachedSignature(g.trustedKeyring, cleartext, signature)
|
||||
|
||||
g.printLog(signers)
|
||||
|
||||
if showKeyTip && missingKeys > 0 {
|
||||
g.showImportKeyTip(signers)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to verify detached signature")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// IsClearSigned returns true if file contains signature
|
||||
func (g *GoVerifier) IsClearSigned(clearsigned io.Reader) (bool, error) {
|
||||
signedBuffer, err := ioutil.ReadAll(clearsigned)
|
||||
if err != nil {
|
||||
return false, errors.Wrap(err, "failed to read clearsigned data")
|
||||
}
|
||||
|
||||
block, _ := clearsign.Decode(signedBuffer)
|
||||
|
||||
return block != nil, nil
|
||||
}
|
||||
|
||||
// VerifyClearsigned verifies clearsigned file using gpgv
|
||||
func (g *GoVerifier) VerifyClearsigned(clearsigned io.Reader, showKeyTip bool) (*KeyInfo, error) {
|
||||
signedBuffer, err := ioutil.ReadAll(clearsigned)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to read clearsigned data")
|
||||
}
|
||||
|
||||
block, _ := clearsign.Decode(signedBuffer)
|
||||
if block == nil {
|
||||
return nil, errors.New("no clearsigned data found")
|
||||
}
|
||||
|
||||
signers, missingKeys, err := checkDetachedSignature(g.trustedKeyring, bytes.NewBuffer(block.Bytes), block.ArmoredSignature.Body)
|
||||
|
||||
g.printLog(signers)
|
||||
|
||||
if showKeyTip && missingKeys > 0 {
|
||||
g.showImportKeyTip(signers)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to verify signature")
|
||||
}
|
||||
|
||||
result := &KeyInfo{}
|
||||
|
||||
for _, signer := range signers {
|
||||
if signer.Entity != nil {
|
||||
result.GoodKeys = append(result.GoodKeys, KeyFromUint64(signer.IssuerKeyID))
|
||||
} else {
|
||||
result.MissingKeys = append(result.MissingKeys, KeyFromUint64(signer.IssuerKeyID))
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// ExtractClearsigned extracts cleartext from clearsigned file WITHOUT signature verification
|
||||
func (g *GoVerifier) ExtractClearsigned(clearsigned io.Reader) (text *os.File, err error) {
|
||||
var signedBuffer []byte
|
||||
signedBuffer, err = ioutil.ReadAll(clearsigned)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to read clearsigned data")
|
||||
}
|
||||
|
||||
block, _ := clearsign.Decode(signedBuffer)
|
||||
if block == nil {
|
||||
return nil, errors.New("no clearsigned data found")
|
||||
}
|
||||
|
||||
text, err = ioutil.TempFile("", "aptly-gpg")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer os.Remove(text.Name())
|
||||
|
||||
_, err = text.Write(block.Bytes)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
_, err = text.Seek(0, 0)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
var gnupgHome string
|
||||
|
||||
func loadKeyRing(name string, ignoreMissing bool) (openpgp.EntityList, error) {
|
||||
// if path doesn't contain slashes, treat it as relative to GnuPG home directory
|
||||
if !strings.Contains(name, "/") {
|
||||
name = filepath.Join(gnupgHome, name)
|
||||
}
|
||||
|
||||
f, err := os.Open(name)
|
||||
if err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
if !ignoreMissing {
|
||||
fmt.Printf("opengpg: failure opening keyring '%s': %s", name, err)
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
return openpgp.ReadKeyRing(f)
|
||||
}
|
||||
|
||||
func init() {
|
||||
gnupgHome = os.Getenv("GNUPGHOME")
|
||||
if gnupgHome == "" {
|
||||
// use default location
|
||||
gnupgHome = filepath.Join(os.Getenv("HOME"), ".gnupg")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
package pgp
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
|
||||
. "gopkg.in/check.v1"
|
||||
)
|
||||
|
||||
type GoVerifierSuite struct {
|
||||
verifier Verifier
|
||||
}
|
||||
|
||||
var _ = Suite(&GoVerifierSuite{})
|
||||
|
||||
func (s *GoVerifierSuite) SetUpTest(c *C) {
|
||||
s.verifier = &GoVerifier{}
|
||||
s.verifier.AddKeyring("./trusted.gpg")
|
||||
|
||||
c.Assert(s.verifier.InitKeyring(), IsNil)
|
||||
}
|
||||
|
||||
func (s *GoVerifierSuite) TestVerifyDetached(c *C) {
|
||||
for _, test := range []struct {
|
||||
textName, signatureName string
|
||||
}{
|
||||
{"1.text", "1.signature"},
|
||||
{"2.text", "2.signature"},
|
||||
{"3.text", "3.signature"},
|
||||
} {
|
||||
cleartext, err := os.Open(test.textName)
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
signature, err := os.Open(test.signatureName)
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
err = s.verifier.VerifyDetachedSignature(signature, cleartext, false)
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
signature.Close()
|
||||
cleartext.Close()
|
||||
}
|
||||
}
|
||||
|
||||
func (s *GoVerifierSuite) TestVerifyClearsigned(c *C) {
|
||||
for _, test := range []struct {
|
||||
clearSignedName string
|
||||
}{
|
||||
{"1.clearsigned"},
|
||||
} {
|
||||
clearsigned, err := os.Open(test.clearSignedName)
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
keyInfo, err := s.verifier.VerifyClearsigned(clearsigned, false)
|
||||
c.Assert(err, IsNil)
|
||||
c.Check(keyInfo.GoodKeys, DeepEquals, []Key{"8B48AD6246925553", "7638D0442B90D010"})
|
||||
c.Check(keyInfo.MissingKeys, DeepEquals, []Key(nil))
|
||||
|
||||
clearsigned.Close()
|
||||
}
|
||||
}
|
||||
|
||||
func (s *GoVerifierSuite) TestExtractClearsigned(c *C) {
|
||||
for _, test := range []struct {
|
||||
clearSignedName, clearTextName string
|
||||
}{
|
||||
{"1.clearsigned", "1.cleartext"},
|
||||
} {
|
||||
clearsigned, err := os.Open(test.clearSignedName)
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
cleartext, err := os.Open(test.clearTextName)
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
is, err := s.verifier.IsClearSigned(clearsigned)
|
||||
c.Assert(err, IsNil)
|
||||
c.Check(is, Equals, true)
|
||||
|
||||
clearsigned.Seek(0, 0)
|
||||
|
||||
extractedF, err := s.verifier.ExtractClearsigned(clearsigned)
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
expected, err := ioutil.ReadAll(cleartext)
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
extracted, err := ioutil.ReadAll(extractedF)
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
c.Check(expected, DeepEquals, extracted)
|
||||
|
||||
extractedF.Close()
|
||||
clearsigned.Close()
|
||||
cleartext.Close()
|
||||
}
|
||||
}
|
||||
+193
@@ -0,0 +1,193 @@
|
||||
package pgp
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto"
|
||||
"hash"
|
||||
"io"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"golang.org/x/crypto/openpgp"
|
||||
"golang.org/x/crypto/openpgp/armor"
|
||||
"golang.org/x/crypto/openpgp/errors"
|
||||
"golang.org/x/crypto/openpgp/packet"
|
||||
)
|
||||
|
||||
// hashForSignature returns a pair of hashes that can be used to verify a
|
||||
// signature. The signature may specify that the contents of the signed message
|
||||
// should be preprocessed (i.e. to normalize line endings). Thus this function
|
||||
// returns two hashes. The second should be used to hash the message itself and
|
||||
// performs any needed preprocessing.
|
||||
func hashForSignature(hashID crypto.Hash, sigType packet.SignatureType) (hash.Hash, hash.Hash, error) {
|
||||
if !hashID.Available() {
|
||||
return nil, nil, errors.UnsupportedError("hash not available: " + strconv.Itoa(int(hashID)))
|
||||
}
|
||||
h := hashID.New()
|
||||
|
||||
switch sigType {
|
||||
case packet.SigTypeBinary:
|
||||
return h, h, nil
|
||||
case packet.SigTypeText:
|
||||
return h, openpgp.NewCanonicalTextHash(h), nil
|
||||
}
|
||||
|
||||
return nil, nil, errors.UnsupportedError("unsupported signature type: " + strconv.Itoa(int(sigType)))
|
||||
}
|
||||
|
||||
type signatureResult struct {
|
||||
CreationTime time.Time
|
||||
IssuerKeyID uint64
|
||||
PubKeyAlgo packet.PublicKeyAlgorithm
|
||||
Entity *openpgp.Entity
|
||||
}
|
||||
|
||||
// checkDetachedSignature takes a signed file and a detached signature and
|
||||
// returns the signer if the signature is valid. If the signer isn't known,
|
||||
// ErrUnknownIssuer is returned.
|
||||
//
|
||||
// This is extended version of golang.org/x/crypto/openpgp to support multiple signers and returns multiple
|
||||
// signers, plus keeps track of "missing" keys
|
||||
func checkDetachedSignature(keyring openpgp.KeyRing, signed, signature io.Reader) (signers []signatureResult, missingKeys int, err error) {
|
||||
var p packet.Packet
|
||||
|
||||
signedBuf := &bytes.Buffer{}
|
||||
if _, e := io.Copy(signedBuf, signed); e != nil && e != io.EOF {
|
||||
return nil, 0, e
|
||||
}
|
||||
|
||||
packets := packet.NewReader(signature)
|
||||
for {
|
||||
p, err = packets.Next()
|
||||
if err == io.EOF {
|
||||
if len(signers) == 0 || missingKeys > 0 {
|
||||
err = errors.ErrUnknownIssuer
|
||||
} else {
|
||||
err = nil
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
var issuerKeyID uint64
|
||||
var hashFunc crypto.Hash
|
||||
var sigType packet.SignatureType
|
||||
var creationTime time.Time
|
||||
var pubKeyAlgo packet.PublicKeyAlgorithm
|
||||
var keys []openpgp.Key
|
||||
|
||||
switch sig := p.(type) {
|
||||
case *packet.Signature:
|
||||
if sig.IssuerKeyId == nil {
|
||||
return nil, 0, errors.StructuralError("signature doesn't have an issuer")
|
||||
}
|
||||
issuerKeyID = *sig.IssuerKeyId
|
||||
hashFunc = sig.Hash
|
||||
sigType = sig.SigType
|
||||
creationTime = sig.CreationTime
|
||||
pubKeyAlgo = sig.PubKeyAlgo
|
||||
case *packet.SignatureV3:
|
||||
issuerKeyID = sig.IssuerKeyId
|
||||
hashFunc = sig.Hash
|
||||
sigType = sig.SigType
|
||||
creationTime = sig.CreationTime
|
||||
pubKeyAlgo = sig.PubKeyAlgo
|
||||
default:
|
||||
return nil, 0, errors.StructuralError("non signature packet found")
|
||||
}
|
||||
|
||||
keys = keyring.KeysByIdUsage(issuerKeyID, packet.KeyFlagSign)
|
||||
if len(keys) == 0 {
|
||||
signers = append(signers, signatureResult{
|
||||
CreationTime: creationTime,
|
||||
IssuerKeyID: issuerKeyID,
|
||||
PubKeyAlgo: pubKeyAlgo,
|
||||
})
|
||||
missingKeys++
|
||||
continue
|
||||
}
|
||||
|
||||
h, wrappedHash, err := hashForSignature(hashFunc, sigType)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
if _, e := io.Copy(wrappedHash, bytes.NewReader(signedBuf.Bytes())); e != nil && e != io.EOF {
|
||||
return nil, 0, e
|
||||
}
|
||||
|
||||
allFailed := true
|
||||
for _, key := range keys {
|
||||
switch sig := p.(type) {
|
||||
case *packet.Signature:
|
||||
err = key.PublicKey.VerifySignature(h, sig)
|
||||
case *packet.SignatureV3:
|
||||
err = key.PublicKey.VerifySignatureV3(h, sig)
|
||||
default:
|
||||
panic("unreachable")
|
||||
}
|
||||
|
||||
if err == nil {
|
||||
signers = append(signers, signatureResult{
|
||||
CreationTime: creationTime,
|
||||
IssuerKeyID: issuerKeyID,
|
||||
PubKeyAlgo: pubKeyAlgo,
|
||||
Entity: key.Entity,
|
||||
})
|
||||
allFailed = false
|
||||
}
|
||||
}
|
||||
|
||||
if allFailed {
|
||||
return nil, 0, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// readArmored reads an armored block with the given type.
|
||||
func readArmored(r io.Reader, expectedType string) (body io.Reader, err error) {
|
||||
block, err := armor.Decode(r)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if block.Type != expectedType {
|
||||
return nil, errors.InvalidArgumentError("expected '" + expectedType + "', got: " + block.Type)
|
||||
}
|
||||
|
||||
return block.Body, nil
|
||||
}
|
||||
|
||||
// checkArmoredDetachedSignature performs the same actions as
|
||||
// CheckDetachedSignature but expects the signature to be armored.
|
||||
//
|
||||
// This is extended version of golang.org/x/crypto/openpgp to support multiple signers and returns multiple
|
||||
// signers, plus keeps track of "missing" keys
|
||||
func checkArmoredDetachedSignature(keyring openpgp.KeyRing, signed, signature io.Reader) (signers []signatureResult, missingKeys int, err error) {
|
||||
body, err := readArmored(signature, openpgp.SignatureType)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return checkDetachedSignature(keyring, signed, body)
|
||||
}
|
||||
|
||||
func pubkeyAlgorithmName(algorithm packet.PublicKeyAlgorithm) string {
|
||||
switch algorithm {
|
||||
case packet.PubKeyAlgoRSA, packet.PubKeyAlgoRSAEncryptOnly, packet.PubKeyAlgoRSASignOnly:
|
||||
return "RSA"
|
||||
case packet.PubKeyAlgoElGamal:
|
||||
return "ElGamal"
|
||||
case packet.PubKeyAlgoDSA:
|
||||
return "DSA"
|
||||
case packet.PubKeyAlgoECDH:
|
||||
return "EDCH"
|
||||
case packet.PubKeyAlgoECDSA:
|
||||
return "ECDSA"
|
||||
}
|
||||
|
||||
return "unknown"
|
||||
}
|
||||
+7
-1
@@ -2,6 +2,7 @@
|
||||
package pgp
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
)
|
||||
@@ -26,6 +27,11 @@ func (key1 Key) Matches(key2 Key) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// KeyFromUint64 converts openpgp uint64 into hex human-readable
|
||||
func KeyFromUint64(key uint64) Key {
|
||||
return Key(fmt.Sprintf("%016X", key))
|
||||
}
|
||||
|
||||
// KeyInfo is response from signature verification
|
||||
type KeyInfo struct {
|
||||
GoodKeys []Key
|
||||
@@ -47,7 +53,7 @@ type Signer interface {
|
||||
type Verifier interface {
|
||||
InitKeyring() error
|
||||
AddKeyring(keyring string)
|
||||
VerifyDetachedSignature(signature, cleartext io.Reader) error
|
||||
VerifyDetachedSignature(signature, cleartext io.Reader, showKeyTip bool) error
|
||||
IsClearSigned(clearsigned io.Reader) (bool, error)
|
||||
VerifyClearsigned(clearsigned io.Reader, showKeyTip bool) (*KeyInfo, error)
|
||||
ExtractClearsigned(clearsigned io.Reader) (text *os.File, err error)
|
||||
|
||||
Binary file not shown.
@@ -1,5 +1,4 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.13 (Darwin)
|
||||
|
||||
mQINBFMwev8BEADFbEQsBDRFBGwrJ+NNo7mAUYq8/gykWh2vnHktjGT+wPKdKOtk
|
||||
hq99Y4p+AL9fp+TT23bnsAcbYf5O7oeHRrD710jWfiE3+3d6tqvF1cputJxrH+TT
|
||||
@@ -93,6 +92,32 @@ e+wthyPxn6KWC1P9QvrLBV+M5p6H0CdO6o0pv/XB8FV9qN5IQltSH8jQSZ/HpwYT
|
||||
VOAYT8FmpduWZ43OOoRk1Kj9sygUmazIRaCH/1gkzjCbN3/rEmmLgMEMR1Ki+9Vg
|
||||
Q3dhcorwOdN/vh/rhEcusFTDPhHSypF9aDRVfNFCjVBN0XhhzYhfhirdol5Z02oi
|
||||
cu9OA+4fuB+31GRaH1NtPp4MLUrZQtKrOaSAaX67APt1hydlulsX1UTDkrS/C7rw
|
||||
RiU9bhqMiXthkmmYFsCA40tGoVY39PWzZg==
|
||||
=C8n/
|
||||
RiU9bhqMiXthkmmYFsCA40tGoVY39PWzZpkBDQRZcQxrAQgA6B8ncRynoZbjKXMy
|
||||
G5NnQchwQMRhKMLDwFbszjpwLeZqbjLqYRQHgtpVMiskSC161Sw3tQRZ8LULpnEU
|
||||
yi2/PzzGyzMfLccQo8oIY9X1OrrsH4i1GJ4rKMEYfO6IIMpME3rvZo7wF1hpY/nm
|
||||
231G36Q51GxNpmTyoAo3Tp2cT325eI5gn5f+zS9wygYv7ma6RhpkUgm/Tnyr9901
|
||||
KO3arwH73ybTFoPKFjqAc0Ep3HGx7PNZy5OW3jF/PY3Q6NIbt/ciPdFmCPjiTnYe
|
||||
kQE1gvr/M2xA5wLI0hl+FP2JB3TDUN4XNBa/09Zw+B5k/s6qqUPytMcorSWNAF0E
|
||||
KtgmtwARAQABtD1QYWNrYWdlIE1haW50YWluZXIgKFBhZ2VyRHV0eSwgSW5jLikg
|
||||
PHBhY2thZ2VzQHBhZ2VyZHV0eS5jb20+iQFUBBMBCAA+FiEEk3rr1RF9RguAuz5n
|
||||
hyoy7XYgPAAFAllxDGsCGwMFCQPCZwAFCwkIBwIGFQgJCgsCBBYCAwECHgECF4AA
|
||||
CgkQhyoy7XYgPABJBQf/fBZvK7FiK/iDlgXNAvsDiT96Ns5ACSExRNpSpOjiPdMr
|
||||
Wpn+c9nN9o8YMTIA75Pfvz10TEQRWFEfeZjTnK5fZFJkOJOUSNL9sP5Zwh7q02+c
|
||||
1rGjM4jiSl3EdGlIVhA+w+tfDJPRBfwUaBwgDzHxV0MZ0fa3seiDorKf9vb+J5ng
|
||||
F2BndraJSN0ax03kNUfemc5CFP+cSO3Du3AXQxJCn095AFAwhQASPU9FvF6Glx3J
|
||||
5wLEY59yoHPcd/D3CiwQ+91tG0OGUIl3qSNP4aGLEVpTHiiOUBGvEVxgFN+PziGq
|
||||
M5lmBZtcZSM02E7Qj0JPAXOPVoShZWzZvv5TPHH9FLkBDQRZcQxrAQgAxC71lDfM
|
||||
odfkYhsHhlYVxU7ei067qilySq/zNTg2R2QDWRr4WiQlvMzFOSHAYTEugvm+suax
|
||||
3ALWEiDgrDruQHKOcfdfODFC2Vcrj08As5jf2REYJ7SW/vX+zao31kJR9izskmnf
|
||||
V3HRI0qZ8wMIDdi8qt7drN88Yxfk+RYkjOezM2vhrXk++25TUVvz6zRiuxm8+rzX
|
||||
C8aO68bGPZYfeGSVKMDlqFTu0KIF4YUN7C37dpvVyro4fpFS9h3+qPxWJCvOjbuY
|
||||
52g1IQ6A/qBZuo0z3ehxjB05cIE8LF3tbc1YGqP0YVnl8VJqfHyBX1FyApUg2c+U
|
||||
6yUdirzxG4culwARAQABiQE8BBgBCAAmFiEEk3rr1RF9RguAuz5nhyoy7XYgPAAF
|
||||
AllxDGsCGwwFCQPCZwAACgkQhyoy7XYgPAAl5Qf8Cez+m8dt6E40ik6+s3A+LdJh
|
||||
6T045K32+9vt9dI2oNUoRFwivHGGcxoPpJYa+oIJPzmsyzCcGFFbRwPrqmBFC9C0
|
||||
e+5oKO9GjKWWbzKxkjatE05V0o9txPXyirBvsEg9lFQzTvemYWDapgLis5tOJjlR
|
||||
tbbdEWDlt2mWBwTDBvSOdynH9Y8sNQ+3JvTKkRgHEXd2ZVs4Auso4TqLeMekshlq
|
||||
p/A/HRr5lqGx6XdNvXubjXJCXuZTsVFIw+aLFL2o71FG71WUbkI3N97QoAYrHeqj
|
||||
+XThmUfH4koGz7Wv5+JSYoIS9xvS3NOs3gywC5bF+3HIzynFGB4BmiYbK8/y4A==
|
||||
=PcZr
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"dependencyVerboseResolve": false,
|
||||
"gpgDisableSign": false,
|
||||
"gpgDisableVerify": false,
|
||||
"gpgProvider": "gpg",
|
||||
"downloadSourcePackages": false,
|
||||
"skipLegacyPool": false,
|
||||
"ppaDistributorID": "ubuntu",
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"dependencyVerboseResolve": false,
|
||||
"gpgDisableSign": false,
|
||||
"gpgDisableVerify": false,
|
||||
"gpgProvider": "gpg",
|
||||
"downloadSourcePackages": false,
|
||||
"skipLegacyPool": true,
|
||||
"ppaDistributorID": "ubuntu",
|
||||
|
||||
@@ -19,4 +19,5 @@ Options:
|
||||
-dep-follow-source=false: when processing dependencies, follow from binary to Source packages
|
||||
-dep-follow-suggests=false: when processing dependencies, follow Suggests
|
||||
-dep-verbose-resolve=false: when processing dependencies, print detailed logs
|
||||
-gpg-provider="": PGP implementation ("gpg" for external gpg or "internal" for Go internal implementation)
|
||||
|
||||
|
||||
@@ -27,4 +27,5 @@ Options:
|
||||
-dep-follow-source=false: when processing dependencies, follow from binary to Source packages
|
||||
-dep-follow-suggests=false: when processing dependencies, follow Suggests
|
||||
-dep-verbose-resolve=false: when processing dependencies, print detailed logs
|
||||
-gpg-provider="": PGP implementation ("gpg" for external gpg or "internal" for Go internal implementation)
|
||||
ERROR: unable to parse command
|
||||
|
||||
@@ -25,6 +25,7 @@ Options:
|
||||
-filter-with-deps=false: when filtering, include dependencies of matching packages as well
|
||||
-force-architectures=false: (only with architecture list) skip check that requested architectures are listed in Release file
|
||||
-force-components=false: (only with component list) skip check that requested components are listed in Release file
|
||||
-gpg-provider="": PGP implementation ("gpg" for external gpg or "internal" for Go internal implementation)
|
||||
-ignore-signatures=false: disable verification of Release file signatures
|
||||
-keyring=: gpg keyring to use when verifying Release file (could be specified multiple times)
|
||||
-with-sources=false: download source packages in addition to binary packages
|
||||
|
||||
@@ -16,6 +16,7 @@ Options:
|
||||
-filter-with-deps=false: when filtering, include dependencies of matching packages as well
|
||||
-force-architectures=false: (only with architecture list) skip check that requested architectures are listed in Release file
|
||||
-force-components=false: (only with component list) skip check that requested components are listed in Release file
|
||||
-gpg-provider="": PGP implementation ("gpg" for external gpg or "internal" for Go internal implementation)
|
||||
-ignore-signatures=false: disable verification of Release file signatures
|
||||
-keyring=: gpg keyring to use when verifying Release file (could be specified multiple times)
|
||||
-with-sources=false: download source packages in addition to binary packages
|
||||
|
||||
@@ -23,3 +23,4 @@ Options:
|
||||
-dep-follow-source=false: when processing dependencies, follow from binary to Source packages
|
||||
-dep-follow-suggests=false: when processing dependencies, follow Suggests
|
||||
-dep-verbose-resolve=false: when processing dependencies, print detailed logs
|
||||
-gpg-provider="": PGP implementation ("gpg" for external gpg or "internal" for Go internal implementation)
|
||||
|
||||
@@ -23,4 +23,5 @@ Options:
|
||||
-dep-follow-source=false: when processing dependencies, follow from binary to Source packages
|
||||
-dep-follow-suggests=false: when processing dependencies, follow Suggests
|
||||
-dep-verbose-resolve=false: when processing dependencies, print detailed logs
|
||||
-gpg-provider="": PGP implementation ("gpg" for external gpg or "internal" for Go internal implementation)
|
||||
ERROR: unable to parse command
|
||||
|
||||
@@ -17,6 +17,7 @@ Options:
|
||||
-filter-with-deps=false: when filtering, include dependencies of matching packages as well
|
||||
-force-architectures=false: (only with architecture list) skip check that requested architectures are listed in Release file
|
||||
-force-components=false: (only with component list) skip check that requested components are listed in Release file
|
||||
-gpg-provider="": PGP implementation ("gpg" for external gpg or "internal" for Go internal implementation)
|
||||
-ignore-signatures=false: disable verification of Release file signatures
|
||||
-keyring=: gpg keyring to use when verifying Release file (could be specified multiple times)
|
||||
-with-sources=false: download source packages in addition to binary packages
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
Downloading http://mirror.yandex.ru/debian/dists/wheezy-backports/InRelease...
|
||||
openpgp: RSA key ID 8B48AD6246925553
|
||||
openpgp: Good signature from "Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>"
|
||||
openpgp: RSA key ID 7638D0442B90D010
|
||||
openpgp: Good signature from "Debian Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>"
|
||||
|
||||
Mirror [mirror9]: http://mirror.yandex.ru/debian/ wheezy-backports successfully added.
|
||||
You can run 'aptly mirror update mirror9' to download repository contents.
|
||||
@@ -0,0 +1,10 @@
|
||||
opengpg: failure opening keyring '${HOME}/.gnupg/aptlytest.gpg': open ${HOME}/.gnupg/aptlytest.gpg: no such file or directory
|
||||
Looks like your keyring with trusted keys is empty. You might consider importing some keys.
|
||||
Downloading http://mirror.yandex.ru/debian-backports/dists/squeeze-backports/InRelease...
|
||||
openpgp: Signature made Sun, 13 Mar 2016 12:02:54 MSK using RSA key ID 8B48AD6246925553
|
||||
openpgp: Can't check signature: public key not found
|
||||
Downloading http://mirror.yandex.ru/debian-backports/dists/squeeze-backports/Release...
|
||||
Downloading http://mirror.yandex.ru/debian-backports/dists/squeeze-backports/Release.gpg...
|
||||
openpgp: Signature made Sun, 13 Mar 2016 12:02:54 MSK using RSA key ID 8B48AD6246925553
|
||||
openpgp: Can't check signature: public key not found
|
||||
ERROR: unable to fetch mirror: failed to verify detached signature: openpgp: signature made by unknown entity
|
||||
@@ -0,0 +1,10 @@
|
||||
Downloading http://mirror.yandex.ru/debian/dists/wheezy/InRelease...
|
||||
Downloading http://mirror.yandex.ru/debian/dists/wheezy/Release...
|
||||
Downloading http://mirror.yandex.ru/debian/dists/wheezy/Release.gpg...
|
||||
openpgp: RSA key ID 8B48AD6246925553
|
||||
openpgp: Good signature from "Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>"
|
||||
openpgp: RSA key ID 7638D0442B90D010
|
||||
openpgp: Good signature from "Debian Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>"
|
||||
|
||||
Mirror [mirror11]: http://mirror.yandex.ru/debian/ wheezy successfully added.
|
||||
You can run 'aptly mirror update mirror11' to download repository contents.
|
||||
@@ -1,7 +1,7 @@
|
||||
Downloading http://packages.pagerduty.com/pdagent/deb/InRelease...
|
||||
Downloading http://packages.pagerduty.com/pdagent/deb/Release...
|
||||
Downloading http://packages.pagerduty.com/pdagent/deb/Release.gpg...
|
||||
gpgv: RSA key ID F8253540
|
||||
gpgv: RSA key ID 76203C00
|
||||
gpgv: Good signature from "Package Maintainer (PagerDuty, Inc.) <packages@pagerduty.com>"
|
||||
Downloading & parsing package files...
|
||||
Downloading http://packages.pagerduty.com/pdagent/deb/Packages.gz...
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
|
||||
|
||||
Building download queue...
|
||||
Download queue: 84 items (138.29 MiB)
|
||||
Downloading & parsing package files...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/InRelease...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/Packages.bz2...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/Release...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/Release.gpg...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/jags_4.0.0-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/jags_4.0.0-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/jags_4.0.0-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/littler_0.3.2-1~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/python-rpy-doc_1.0.3-30~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/python-rpy2_2.5.6-1~jessiecran.3.2.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/python-rpy2_2.5.6-1~jessiecran.3.2.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/python-rpy2_2.5.6-1~jessiecran.3.2.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/python-rpy_1.0.3-30~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/python-rpy_1.0.3-30~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/python-rpy_1.0.3-30~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-base-core-dbg_3.3.3-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-base-core-dbg_3.3.3-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-base-core-dbg_3.3.3-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-base-core_3.3.3-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-base-core_3.3.3-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-base-core_3.3.3-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-base-dev_3.3.3-1~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-base-html_3.3.3-1~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-base_3.3.3-1~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-boot_1.3-18-1~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-boot_1.3-18-2~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-class_7.3-14-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-class_7.3-14-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-class_7.3-14-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-cluster_2.0.5-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-cluster_2.0.5-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-cluster_2.0.5-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-coda_0.18-1-1~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-codetools_0.2-14-1~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-codetools_0.2-15-1~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-foreign_0.8.67-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-foreign_0.8.67-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-foreign_0.8.67-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-kernsmooth_2.23-15-2~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-kernsmooth_2.23-15-2~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-kernsmooth_2.23-15-2~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-lattice_0.20-34-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-lattice_0.20-34-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-lattice_0.20-34-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-littler_0.3.2-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-littler_0.3.2-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-littler_0.3.2-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-mass_7.3-45-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-mass_7.3-45-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-mass_7.3-45-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-matrix_1.2-8-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-matrix_1.2-8-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-matrix_1.2-8-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-mgcv_1.8-16-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-mgcv_1.8-16-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-mgcv_1.8-16-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-nlme_3.1.131-2~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-nlme_3.1.131-2~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-nlme_3.1.131-2~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-nnet_7.3-12-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-nnet_7.3-12-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-nnet_7.3-12-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-rjags_4-6-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-rjags_4-6-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-rjags_4-6-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-rodbc_1.3-14-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-rodbc_1.3-14-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-rodbc_1.3-14-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-rpart_4.1-10-2~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-rpart_4.1-10-2~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-rpart_4.1-10-2~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-spatial_7.3-11-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-spatial_7.3-11-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-spatial_7.3-11-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-survival_2.40-1-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-survival_2.40-1-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-cran-survival_2.40-1-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-doc-html_3.3.3-1~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-doc-info_3.3.3-1~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-doc-pdf_3.3.3-1~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-mathlib_3.3.3-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-mathlib_3.3.3-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-mathlib_3.3.3-1~jessiecran.0_i386.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/r-recommended_3.3.3-1~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/rkward-data_0.6.5-1~jessiecran.0_all.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/rkward_0.6.5-1~jessiecran.0_amd64.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/rkward_0.6.5-1~jessiecran.0_armel.deb...
|
||||
Downloading https://cloud.r-project.org/bin/linux/debian/jessie-cran3/rkward_0.6.5-1~jessiecran.0_i386.deb...
|
||||
Mirror `flat` has been successfully updated.
|
||||
openpgp: Good signature from "Johannes Ranke (CRAN Debian archive) <jranke@uni-bremen.de>"
|
||||
openpgp: DSA key ID 06F90DE5381BA480
|
||||
@@ -0,0 +1,11 @@
|
||||
Downloading http://packages.pagerduty.com/pdagent/deb/InRelease...
|
||||
Downloading http://packages.pagerduty.com/pdagent/deb/Release...
|
||||
Downloading http://packages.pagerduty.com/pdagent/deb/Release.gpg...
|
||||
openpgp: RSA key ID 872A32ED76203C00
|
||||
openpgp: Good signature from "Package Maintainer (PagerDuty, Inc.) <packages@pagerduty.com>"
|
||||
Downloading & parsing package files...
|
||||
Downloading http://packages.pagerduty.com/pdagent/deb/Packages.gz...
|
||||
Building download queue...
|
||||
Download queue: 13 items (1.66 MiB)
|
||||
|
||||
Mirror `pagerduty` has been successfully updated.
|
||||
@@ -357,3 +357,41 @@ class CreateMirror28Test(BaseTest):
|
||||
|
||||
self.check_output()
|
||||
self.check_cmd_output("aptly mirror show mirror28", "mirror_show", match_prepare=removeDates)
|
||||
|
||||
|
||||
class CreateMirror29Test(BaseTest):
|
||||
"""
|
||||
create mirror: repo with InRelease verification (internal GPG implementation)
|
||||
"""
|
||||
runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror9 http://mirror.yandex.ru/debian/ wheezy-backports"
|
||||
configOverride = {"gpgProvider": "internal"}
|
||||
fixtureGpg = True
|
||||
|
||||
def outputMatchPrepare(_, s):
|
||||
return re.sub(r'Signature made .* using', '', s)
|
||||
|
||||
|
||||
class CreateMirror30Test(BaseTest):
|
||||
"""
|
||||
create mirror: repo with InRelease verification, failure (internal GPG implementation)
|
||||
"""
|
||||
runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror10 http://mirror.yandex.ru/debian-backports/ squeeze-backports"
|
||||
configOverride = {"gpgProvider": "internal"}
|
||||
gold_processor = BaseTest.expand_environ
|
||||
fixtureGpg = False
|
||||
expectedCode = 1
|
||||
|
||||
def outputMatchPrepare(_, s):
|
||||
return re.sub(r'Signature made .* using', '', s)
|
||||
|
||||
|
||||
class CreateMirror31Test(BaseTest):
|
||||
"""
|
||||
create mirror: repo with Release + Release.gpg verification (internal GPG implementation)
|
||||
"""
|
||||
runCmd = "aptly mirror create --keyring=aptlytest.gpg mirror11 http://mirror.yandex.ru/debian/ wheezy"
|
||||
configOverride = {"gpgProvider": "internal"}
|
||||
fixtureGpg = True
|
||||
|
||||
def outputMatchPrepare(_, s):
|
||||
return re.sub(r'Signature made .* using', '', s)
|
||||
|
||||
@@ -327,3 +327,36 @@ class UpdateMirror19Test(BaseTest):
|
||||
|
||||
def output_processor(self, output):
|
||||
return "\n".join(line for line in output.split("\n") if ".deb" not in line)
|
||||
|
||||
|
||||
class UpdateMirror20Test(BaseTest):
|
||||
"""
|
||||
update mirrors: flat repository (internal GPG implementation)
|
||||
"""
|
||||
fixtureGpg = True
|
||||
fixtureCmds = [
|
||||
"aptly mirror create --keyring=aptlytest.gpg -architectures=amd64 flat https://cloud.r-project.org/bin/linux/debian jessie-cran3/",
|
||||
]
|
||||
configOverride = {"gpgProvider": "internal"}
|
||||
runCmd = "aptly mirror update --keyring=aptlytest.gpg flat"
|
||||
outputMatchPrepare = filterOutSignature
|
||||
|
||||
def output_processor(self, output):
|
||||
return "\n".join(sorted(output.split("\n")))
|
||||
|
||||
|
||||
class UpdateMirror21Test(BaseTest):
|
||||
"""
|
||||
update mirrors: correct matching of Release checksums (internal pgp implementation)
|
||||
"""
|
||||
longTest = False
|
||||
configOverride = {"gpgProvider": "internal"}
|
||||
fixtureGpg = True
|
||||
fixtureCmds = [
|
||||
"aptly mirror create --keyring=aptlytest.gpg pagerduty http://packages.pagerduty.com/pdagent deb/"
|
||||
]
|
||||
runCmd = "aptly mirror update --keyring=aptlytest.gpg pagerduty"
|
||||
outputMatchPrepare = filterOutSignature
|
||||
|
||||
def output_processor(self, output):
|
||||
return "\n".join(line for line in output.split("\n") if ".deb" not in line)
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
Loading packages...
|
||||
Generating metadata files and linking package files...
|
||||
Finalizing metadata files...
|
||||
openpgp: signing file 'Release'...
|
||||
openpgp: clearsigning file 'Release'...
|
||||
|
||||
Local repo local-repo has been successfully published.
|
||||
Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing.
|
||||
Now you can add following line to apt sources:
|
||||
deb http://your-server/ maverick main
|
||||
deb-src http://your-server/ maverick main
|
||||
Don't forget to add your GPG key to apt with apt-key.
|
||||
|
||||
You can also use `aptly serve` to publish your repositories over HTTP quickly.
|
||||
@@ -0,0 +1,15 @@
|
||||
openpgp: Passphrase is required to unlock private key "Aptly Tester (don't use it) <test@aptly.info>"
|
||||
Loading packages...
|
||||
Generating metadata files and linking package files...
|
||||
Finalizing metadata files...
|
||||
openpgp: signing file 'Release'...
|
||||
openpgp: clearsigning file 'Release'...
|
||||
|
||||
Local repo local-repo has been successfully published.
|
||||
Please setup your webserver to serve directory '${HOME}/.aptly/public' with autoindexing.
|
||||
Now you can add following line to apt sources:
|
||||
deb http://your-server/ maverick main
|
||||
deb-src http://your-server/ maverick main
|
||||
Don't forget to add your GPG key to apt with apt-key.
|
||||
|
||||
You can also use `aptly serve` to publish your repositories over HTTP quickly.
|
||||
@@ -710,3 +710,49 @@ class PublishRepo29Test(BaseTest):
|
||||
]
|
||||
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick local-repo"
|
||||
gold_processor = BaseTest.expand_environ
|
||||
|
||||
|
||||
class PublishRepo30Test(BaseTest):
|
||||
"""
|
||||
publish repo: default (internal PGP implementation)
|
||||
"""
|
||||
fixtureCmds = [
|
||||
"aptly repo create local-repo",
|
||||
"aptly repo add local-repo ${files}",
|
||||
]
|
||||
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick local-repo"
|
||||
gold_processor = BaseTest.expand_environ
|
||||
configOverride = {"gpgProvider": "internal"}
|
||||
|
||||
def check(self):
|
||||
super(PublishRepo30Test, self).check()
|
||||
|
||||
# verify signatures
|
||||
self.run_cmd(["gpg", "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
|
||||
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
|
||||
self.run_cmd(["gpg", "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
|
||||
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
|
||||
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
|
||||
|
||||
|
||||
class PublishRepo31Test(BaseTest):
|
||||
"""
|
||||
publish repo: sign with passphrase (internal PGP implementation)
|
||||
"""
|
||||
fixtureCmds = [
|
||||
"aptly repo create local-repo",
|
||||
"aptly repo add local-repo ${files}",
|
||||
]
|
||||
runCmd = "aptly publish repo -keyring=${files}/aptly_passphrase.pub -secret-keyring=${files}/aptly_passphrase.sec -passphrase=verysecret -distribution=maverick local-repo"
|
||||
gold_processor = BaseTest.expand_environ
|
||||
configOverride = {"gpgProvider": "internal"}
|
||||
|
||||
def check(self):
|
||||
super(PublishRepo31Test, self).check()
|
||||
|
||||
# verify signatures
|
||||
self.run_cmd(["gpg", "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly_passphrase.pub"),
|
||||
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
|
||||
self.run_cmd(["gpg", "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly_passphrase.pub"),
|
||||
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
|
||||
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
openpgp: DSA key ID 21DBB89C16DB3E6D
|
||||
openpgp: Good signature from "Aptly Tester (don't use it) <test@aptly.info>"
|
||||
Loading repository unstable for changes file hardlink_0.2.1_amd64.changes...
|
||||
[+] hardlink_0.2.1_source added
|
||||
[+] hardlink_0.2.1_amd64 added
|
||||
@@ -0,0 +1,4 @@
|
||||
[!] unable to process file hardlink_0.2.1_amd64.changes: failed to verify signature: openpgp: invalid signature: hash tag doesn't match
|
||||
[!] Some files were skipped due to errors:
|
||||
/01/hardlink_0.2.1_amd64.changes
|
||||
ERROR: some files failed to be added
|
||||
@@ -468,3 +468,51 @@ class IncludeRepo19Test(BaseTest):
|
||||
|
||||
def outputMatchPrepare(_, s):
|
||||
return changesRemove(_, gpgRemove(_, s))
|
||||
|
||||
|
||||
class IncludeRepo20Test(BaseTest):
|
||||
"""
|
||||
include packages to local repo: .changes file from directory (internal PGP implementation)
|
||||
"""
|
||||
fixtureCmds = [
|
||||
"aptly repo create unstable",
|
||||
]
|
||||
runCmd = "aptly repo include -no-remove-files -keyring=${files}/aptly.pub ${changes}"
|
||||
outputMatchPrepare = gpgRemove
|
||||
configOverride = {"gpgProvider": "internal"}
|
||||
|
||||
|
||||
class IncludeRepo21Test(BaseTest):
|
||||
"""
|
||||
include packages to local repo: wrong signature (internal PGP implementation)
|
||||
"""
|
||||
fixtureCmds = [
|
||||
"aptly repo create unstable",
|
||||
]
|
||||
runCmd = "aptly repo include -keyring=${files}/aptly.pub "
|
||||
expectedCode = 1
|
||||
configOverride = {"gpgProvider": "internal"}
|
||||
|
||||
def outputMatchPrepare(self, s):
|
||||
return gpgRemove(self, tempDirRemove(self, s))
|
||||
|
||||
def prepare(self):
|
||||
super(IncludeRepo21Test, self).prepare()
|
||||
|
||||
self.tempSrcDir = tempfile.mkdtemp()
|
||||
|
||||
shutil.copytree(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes"), os.path.join(self.tempSrcDir, "01"))
|
||||
|
||||
with open(os.path.join(self.tempSrcDir, "01", "hardlink_0.2.1_amd64.changes"), "r+") as f:
|
||||
contents = f.read()
|
||||
f.seek(0, 0)
|
||||
f.write(contents.replace('Julian', 'Andrey'))
|
||||
f.truncate()
|
||||
|
||||
self.runCmd += self.tempSrcDir
|
||||
|
||||
def check(self):
|
||||
try:
|
||||
super(IncludeRepo21Test, self).check()
|
||||
finally:
|
||||
shutil.rmtree(self.tempSrcDir)
|
||||
|
||||
@@ -19,6 +19,7 @@ type ConfigStructure struct { // nolint: aligncheck
|
||||
DepVerboseResolve bool `json:"dependencyVerboseResolve"`
|
||||
GpgDisableSign bool `json:"gpgDisableSign"`
|
||||
GpgDisableVerify bool `json:"gpgDisableVerify"`
|
||||
GpgProvider string `json:"gpgProvider"`
|
||||
DownloadSourcePackages bool `json:"downloadSourcePackages"`
|
||||
SkipLegacyPool bool `json:"skipLegacyPool"`
|
||||
PpaDistributorID string `json:"ppaDistributorID"`
|
||||
@@ -79,6 +80,7 @@ var Config = ConfigStructure{
|
||||
DepFollowRecommends: false,
|
||||
DepFollowAllVariants: false,
|
||||
DepFollowSource: false,
|
||||
GpgProvider: "gpg",
|
||||
GpgDisableSign: false,
|
||||
GpgDisableVerify: false,
|
||||
DownloadSourcePackages: false,
|
||||
|
||||
@@ -30,6 +30,7 @@ func (s *ConfigSuite) TestSaveConfig(c *C) {
|
||||
|
||||
s.config.RootDir = "/tmp/aptly"
|
||||
s.config.DownloadConcurrency = 5
|
||||
s.config.GpgProvider = "gpg"
|
||||
|
||||
s.config.FileSystemPublishRoots = map[string]FileSystemPublishRoot{"test": {
|
||||
RootDir: "/opt/aptly-publish"}}
|
||||
@@ -64,6 +65,7 @@ func (s *ConfigSuite) TestSaveConfig(c *C) {
|
||||
" \"dependencyVerboseResolve\": false,\n"+
|
||||
" \"gpgDisableSign\": false,\n"+
|
||||
" \"gpgDisableVerify\": false,\n"+
|
||||
" \"gpgProvider\": \"gpg\",\n"+
|
||||
" \"downloadSourcePackages\": false,\n"+
|
||||
" \"skipLegacyPool\": false,\n"+
|
||||
" \"ppaDistributorID\": \"\",\n"+
|
||||
|
||||
Reference in New Issue
Block a user