diff options
| -rw-r--r-- | Makefile | 3 | ||||
| -rw-r--r-- | argv.go | 24 | ||||
| -rw-r--r-- | doDistro.go | 11 | ||||
| -rw-r--r-- | doMake.go | 61 | ||||
| -rw-r--r-- | doRelease.go (renamed from doEverything.go) | 13 | ||||
| -rw-r--r-- | main.go | 38 | ||||
| -rw-r--r-- | makePackagesFile.go | 70 | ||||
| -rw-r--r-- | stuff.go | 20 |
8 files changed, 123 insertions, 117 deletions
@@ -5,8 +5,7 @@ GUIVERSION = $(shell git describe --tags) BUILDTIME = $(shell date +%s) all: reset goimports vet install - -try-everything: reset goimports vet build automate-everything + mirrors everything automate-everything: ./mirrors walk @@ -17,18 +17,18 @@ import ( var argv args type args struct { - List *EmptyCmd `arg:"subcommand:list" help:"show the packages"` - Walk *WalkCmd `arg:"subcommand:walk" help:"walk the filesystem for new .deb files"` - Update *EmptyCmd `arg:"subcommand:oldway" help:"the old code to update the apt repo"` - Verify *EmptyCmd `arg:"subcommand:verify" help:"verify the pb is accurate and doesn't have errors"` - Incoming *IncomingCmd `arg:"subcommand:incoming" help:"handle the incoming directory"` - MakeDists *EmptyCmd `arg:"subcommand:makedists" help:"make debian mirrors/dists files for 'apt update'"` - Everything *EmptyCmd `arg:"subcommand:everything" help:"do the whole thing needed. nothing more. just everything."` - Newest *EmptyCmd `arg:"subcommand:newest" help:"make a list of the newest .deb packages"` - DryRun bool `arg:"--dry-run" help:"only show what would be packaged"` - Verbose bool `arg:"--verbose" help:"be loud about it"` - Force bool `arg:"--force" help:"rebuild everything"` - Create bool `arg:"--create" help:"create a new .pb file"` + List *EmptyCmd `arg:"subcommand:list" help:"show the packages"` + Walk *WalkCmd `arg:"subcommand:walk" help:"walk the filesystem for new .deb files"` + Verify *EmptyCmd `arg:"subcommand:verify" help:"verify the pb is accurate and doesn't have errors"` + Incoming *IncomingCmd `arg:"subcommand:incoming" help:"handle the incoming directory"` + MakeDists *EmptyCmd `arg:"subcommand:makedists" help:"make debian mirrors/dists files for 'apt update'"` + SignRelease *EmptyCmd `arg:"subcommand:release" help:"make & GPG sign the Release files"` + Everything *EmptyCmd `arg:"subcommand:everything" help:"do the whole thing needed. nothing more. just everything."` + Newest *EmptyCmd `arg:"subcommand:newest" help:"make a list of the newest .deb packages"` + DryRun bool `arg:"--dry-run" help:"only show what would be packaged"` + Verbose bool `arg:"--verbose" help:"be loud about it"` + Force bool `arg:"--force" help:"rebuild everything"` + Create bool `arg:"--create" help:"create a new .pb file"` } type EmptyCmd struct { diff --git a/doDistro.go b/doDistro.go index 20b28fb..f8034cd 100644 --- a/doDistro.go +++ b/doDistro.go @@ -1,14 +1,6 @@ package main -import ( - "fmt" - "os" - "path/filepath" - "strings" - - "go.wit.com/log" -) - +/* func doDistro() error { log.Println("--- Starting Debian repository generation in Go ---") @@ -92,3 +84,4 @@ func doDistro() error { log.Println("--- Repository generation complete! ---") return nil } +*/ @@ -1,12 +1,20 @@ package main import ( + "crypto/md5" + "crypto/sha256" + "errors" + "fmt" + "io" "os" + "path/filepath" "strings" "go.wit.com/lib/debian" + "go.wit.com/lib/gui/shell" "go.wit.com/lib/protobuf/zoopb" "go.wit.com/log" + "google.golang.org/protobuf/types/known/timestamppb" ) // os.Chdir(me.mirrorsDir) @@ -48,3 +56,56 @@ func doMakePackagesFile(all *zoopb.Packages) string { } return pfile } + +func populateDebInfo(p *zoopb.Package) error { + // SIMPLE SANITY CHECKS + if p.DebInfo != nil { + // already added p.DebInfo + return nil + } + fullname := filepath.Join(me.pb.BaseDir, p.Filename) + cmd := []string{"dpkg", "-I", fullname} + r := shell.Run(cmd) + if r.Error != nil { + return r.Error + } + if r.Exit != 0 { + return errors.New("dpkg returned -1") + } + stat, err := os.Stat(fullname) + if err != nil { + return err + } + filedata, err := os.Open(fullname) + if err != nil { + return err + } + defer filedata.Close() + // SIMPLE SANITY CHECKS END + + // SHA256 HASH + p.DebInfo = new(zoopb.DebInfo) + + hSHA256 := sha256.New() + hMD5 := md5.New() // probably deprecate, but love md5sum too much + // hSHA1 := sha1.New() // deprecated + + // TeeReader allows writing to multiple hashers at once + // multiWriter := io.MultiWriter(hMD5, hSHA1, hSHA256) + multiWriter := io.MultiWriter(hSHA256, hMD5) + if _, err := io.Copy(multiWriter, filedata); err != nil { + return err + } + p.DebInfo.SHA256 = fmt.Sprintf("%x", hSHA256.Sum(nil)) // should be the standard now + p.DebInfo.MD5SUM = fmt.Sprintf("%x", hMD5.Sum(nil)) // probably deprecate + // p.DebInfo.SHA1 = fmt.Sprintf("%x", hSHA1.Sum(nil)) // deprecated + // SHA256 HASH END + + // set file create time + p.Ctime = timestamppb.New(stat.ModTime()) + + // PARSE "dpkg -I <p.Filename>", then exit as we are done + all := strings.Join(r.Stdout, "\n") + debian.ParseDpkgOutputIntoPB(p, all) + return nil +} diff --git a/doEverything.go b/doRelease.go index f8d9546..887dab9 100644 --- a/doEverything.go +++ b/doRelease.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "crypto/sha256" "errors" "fmt" @@ -14,7 +15,7 @@ import ( "go.wit.com/log" ) -func doEverything() (string, error) { +func doRelease() (string, error) { // log.Info(r, err2) shell.RunVerbose([]string{"rm", "-rf", "/home/mirrors/wit/dists"}) // shell.RunVerbose([]string{"rm", "f", "/home/mirrors/wit/dists/sid/InRelease"}) @@ -162,3 +163,13 @@ func doEverything() (string, error) { return "did everything", nil } + +func runCommand(cmd *exec.Cmd) error { + var stderr bytes.Buffer + cmd.Stderr = &stderr + err := cmd.Run() + if err != nil { + return fmt.Errorf("command '%s' failed: %v\nStderr: %s", cmd.String(), err, stderr.String()) + } + return nil +} @@ -9,6 +9,7 @@ import ( "go.wit.com/lib/gui/prep" "go.wit.com/lib/gui/shell" "go.wit.com/lib/protobuf/zoopb" + "go.wit.com/log" ) // sent via -ldflags @@ -96,16 +97,43 @@ func main() { s, err = doVerify() } - if argv.Update != nil { - err = doDistro() - } - if argv.MakeDists != nil { s, err = doMakeDists() } + if argv.SignRelease != nil { + s, err = doRelease() + } + if argv.Everything != nil { - s, err = doEverything() + s, err = doWalk() + if err != nil { + me.sh.BadExit(s, err) + } + s, err = doIncoming(me.pb) + if err != nil { + me.sh.BadExit(s, err) + } + // a second time, files from incoming should have + // been moved now + s, err = doWalk() + if err != nil { + me.sh.BadExit(s, err) + } + + // verify all the packages + s, err = doVerify() + if err != nil { + me.sh.BadExit(s, err) + } + + // print a table of the newest packages + all := doGetNewest("amd64") + s = "newest .deb files table: " + all.PrintTable() + log.Info("newest files are:", s) + + // make and GPG sign the Release files + s, err = doRelease() } if err != nil { diff --git a/makePackagesFile.go b/makePackagesFile.go deleted file mode 100644 index a2d1173..0000000 --- a/makePackagesFile.go +++ /dev/null @@ -1,70 +0,0 @@ -package main - -import ( - "crypto/md5" - "crypto/sha256" - "errors" - "fmt" - "io" - "os" - "path/filepath" - "strings" - - "go.wit.com/lib/debian" - "go.wit.com/lib/gui/shell" - "go.wit.com/lib/protobuf/zoopb" - "google.golang.org/protobuf/types/known/timestamppb" -) - -func populateDebInfo(p *zoopb.Package) error { - // SIMPLE SANITY CHECKS - if p.DebInfo != nil { - // already added p.DebInfo - return nil - } - fullname := filepath.Join(me.pb.BaseDir, p.Filename) - cmd := []string{"dpkg", "-I", fullname} - r := shell.Run(cmd) - if r.Error != nil { - return r.Error - } - if r.Exit != 0 { - return errors.New("dpkg returned -1") - } - stat, err := os.Stat(fullname) - if err != nil { - return err - } - filedata, err := os.Open(fullname) - if err != nil { - return err - } - defer filedata.Close() - // SIMPLE SANITY CHECKS END - - // SHA256 HASH - p.DebInfo = new(zoopb.DebInfo) - - hSHA256 := sha256.New() - hMD5 := md5.New() // probably deprecate, but love md5sum too much - // hSHA1 := sha1.New() // deprecated - - // TeeReader allows writing to multiple hashers at once - // multiWriter := io.MultiWriter(hMD5, hSHA1, hSHA256) - multiWriter := io.MultiWriter(hSHA256, hMD5) - if _, err := io.Copy(multiWriter, filedata); err != nil { - return err - } - p.DebInfo.SHA256 = fmt.Sprintf("%x", hSHA256.Sum(nil)) // should be the standard now - p.DebInfo.MD5SUM = fmt.Sprintf("%x", hMD5.Sum(nil)) // probably deprecate - // p.DebInfo.SHA1 = fmt.Sprintf("%x", hSHA1.Sum(nil)) // deprecated - // SHA256 HASH END - - // set file create time - p.Ctime = timestamppb.New(stat.ModTime()) - - // PARSE "dpkg -I <p.Filename>", then exit as we are done - all := strings.Join(r.Stdout, "\n") - debian.ParseDpkgOutputIntoPB(p, all) - return nil -} @@ -1,23 +1,6 @@ package main -import ( - "bufio" - "bytes" - "compress/gzip" - "crypto/md5" - "crypto/sha1" - "crypto/sha256" - "fmt" - "io" - "os" - "os/exec" - "path/filepath" - "strings" - "time" - - "go.wit.com/log" -) - +/* func runCommand(cmd *exec.Cmd) error { var stderr bytes.Buffer cmd.Stderr = &stderr @@ -238,3 +221,4 @@ func scanDebs(root string, count int) ([]DebInfo, error) { }) return debs, err } +*/ |
