diff options
| -rw-r--r-- | doMakeDists.go | 14 | ||||
| -rw-r--r-- | main.go | 28 | ||||
| -rw-r--r-- | mirrorsSupport.go.off | 162 |
3 files changed, 194 insertions, 10 deletions
diff --git a/doMakeDists.go b/doMakeDists.go index 7cdea78..7967174 100644 --- a/doMakeDists.go +++ b/doMakeDists.go @@ -7,12 +7,16 @@ import ( // os.Chdir(me.mirrorsDir) // makes the dists/ for 'apt update' func doMakeDists() (string, error) { + var s string + var err error os.Chdir(me.pb.BaseDir) - for p := range me.pb.IterAll() { - p.Print() - return "printed one out", nil - } - s, err := me.pb.MakeDists() + /* + for p := range me.pb.IterAll() { + p.Print() + return "printed one out", nil + } + s, err := me.pb.MakeDists() + */ return s, err } @@ -89,7 +89,7 @@ func main() { } if argv.Newest != nil { - s, err = doNewest() + s, err = doNewest("amd64") } if err != nil { @@ -99,12 +99,14 @@ func main() { } // make a list of the newest .deb files -func doNewest() (string, error) { +func doNewest(arch string) (string, error) { log.Info("Processing dir", filepath.Join(me.pb.BaseDir, "pool")) newest := zoopb.NewPackages() - var counter int for p := range me.pb.IterAll() { + if p.Architecture != arch { + continue + } found := newest.FindByPackage(p.Package) if found == nil { // package is new @@ -125,7 +127,23 @@ func doNewest() (string, error) { } newest.SortPackage() - footer := newest.PrintTable() - log.Info("newest packages ?", footer, counter) + var myshit string + for p := range newest.IterAll() { + controlfile, err := p.GetDebianControlFile() + if err != nil { + log.Info("make debInfo file error", err) + panic("deb error") + } + log.Info(controlfile) + myshit += controlfile + "\n" + } + + fullname := "/home/mirrors/wit/first.Packages" + if err := os.WriteFile(fullname, []byte(myshit), 0644); err != nil { + return fullname, err + } + + // footer := newest.PrintTable() + // log.Info("newest packages ?", footer, counter) return "doNewest", nil } diff --git a/mirrorsSupport.go.off b/mirrorsSupport.go.off new file mode 100644 index 0000000..d60cd2d --- /dev/null +++ b/mirrorsSupport.go.off @@ -0,0 +1,162 @@ +package main + +// makes dists/ directores for 'apt update' + +import ( + "bytes" + "errors" + "fmt" + "io" + "os" + "path" + "path/filepath" + "strings" + + "go.wit.com/lib/gui/shell" + "go.wit.com/log" + "google.golang.org/protobuf/encoding/prototext" +) + +var verbose bool + +// remove and return the pb varname +func (pb *Package) DeleteString(varname string) string { + return "todo" +} + +func (pb *Package) Print() { + shell.RunVerbose([]string{"dpkg", "-I", pb.Filename}) + log.Info("\nNEW PB START") + log.Info(strings.TrimSpace(prototext.Format(pb))) + log.Info("NEW PB END\n") + + log.Info("Attempt to walk pb.DebInfo") + if err := printDebInfoStrings(pb, true); err != nil { + log.Info("pb.walk error:", err) + } + +} + +// makes /home/mirrors/debian/dists/ for use by 'apt update' +func (pb *Packages) MakeDists() (string, error) { + log.Printf("Attempting to make dists/ in %s with %d .deb files\n", pb.BaseDir, pb.Len()) + os.Chdir(pb.BaseDir) + + var s string + var err error + var archpb *Packages + archpb, s, err = pb.doNormalArch("all") + log.Printf("arch all found %5d packages. %s err=(%v)\n", archpb.Len(), filepath.Join(pb.BaseDir, s), err) + archpb, s, err = pb.doNormalArch("riscv64") + log.Printf("arch riscv64 found %5d packages. %s err=(%v)\n", archpb.Len(), filepath.Join(pb.BaseDir, s), err) + + // archpb, s, err = pb.doNormalArch("amd64") + // log.Printf("arch amd64 found %5d packages. %s err=(%v)\n", archpb.Len(), filepath.Join(pb.BaseDir, s), err) + + // archpb, s, err = pb.doNormalArch("arm64") + // log.Printf("arch arm64 found %5d not as cool as riscv packages. msg='%s' err=(%v)\n", archpb.Len(), s, err) + + return s, nil +} + +func (pb *Packages) doNormalArch(arch string) (*Packages, string, error) { + packageDir := filepath.Join("dists", "sid", "main", "binary-"+arch) + archpb, s, err := pb.MakePackageFile(packageDir, arch) + if err != nil { + log.Info("MakePackageFile() failed", s, err) + } else { + if verbose { + log.Info("MakePackageFile() for", arch, "worked") + } + } + + /* + // 5. Generate and sign the Release file + log.Println("Generating and signing Release file...") + if err := generateAndSignReleaseFile(distPath); err != nil { + log.Printf("Failed to generate or sign Release file: %v\n", err) + return err + } + */ + return archpb, filepath.Join(packageDir, "Packages"), err +} + +// similar to "dpkg -I moonbuggy.deb" +// destroys the pb so send a copy +func (pb *Package) writeDebInfo(w io.Writer) { + fmt.Fprintf(w, "Package: %s\n", pb.Package) + fmt.Fprintf(w, "Filename: %s\n", pb.Filename) + fmt.Fprintf(w, "MD5sum: %s\n", pb.DeleteString("md5sum")) + fmt.Fprintf(w, "SHA1: %s\n", pb.DeleteString("SHA1")) + fmt.Fprintf(w, "SHA256: %s\n", pb.DeleteString("sha256")) +} + +// makes the file "dists/sid/main/binary-riscv64/Packages" +// then compresses it as .gz & .bz2 files +func (pb *Packages) MakePackageFile(packageDir string, arch string) (*Packages, string, error) { + if verbose { + log.Printf("Attempting to make Package file for arch=%s\n", arch) + } + if err := os.Chdir(pb.BaseDir); err != nil { + return nil, "", err + } + + fullpath := path.Join(pb.BaseDir, packageDir) + if err := os.MkdirAll(fullpath, 0755); err != nil { + return nil, "", err + } + + // made a new PB in memory of just the matching riscv64.deb files + matcharch := NewPackages() + + // goes through each .deb file and writes out the entry in the Packages file + for debPB := range pb.IterAll() { + if verbose { + log.Info("Adding package", debPB.Architecture, debPB.Filename) + } + if debPB.Architecture != arch { + continue + } + matcharch.Append(debPB) + } + + if matcharch.Len() == 0 { + return matcharch, "found no files", errors.New("no " + arch + " files found") + } + + var data bytes.Buffer + for debPB := range matcharch.IterByFilename() { + if verbose { + log.Info("Adding package", debPB.Filename) + } + debPB.writeDebInfo(&data) + fmt.Fprintf(&data, "\n") + } + + // write out the "Packages" file + filename := filepath.Join(packageDir, "Package") + fullname := filepath.Join(pb.BaseDir, filename) + if len(data.String()) == 0 { + return matcharch, fullname, errors.New("something is wrong. Package file would be empty") + } + log.Info("Going to write file", fullname, "with string length", len(data.String())) + if err := os.WriteFile(fullname, []byte(data.String()), 0644); err != nil { + return matcharch, fullname, err + } + + log.Info(data.String()) + + /* + // Create "Packages.gz" + if err := compressFile(filepath.Join(fullfile, "Package.gz"); err != nil { + return err + } + + // Create "Packages.gz" + if err := compressFile(filepath.Join(fullfile, "Package.bz2"); err != nil { + return err + } + */ + s := log.Sprintf("Created %s", fullname) + return matcharch, s, nil +} |
