예제 #1
0
파일: mirror.go 프로젝트: pacur/pacur
func (m *Mirror) createPacman() (err error) {
	outDir := filepath.Join(m.Root, "pacman")

	err = utils.MkdirAll(outDir)
	if err != nil {
		return
	}

	err = utils.RsyncExt(m.Root, outDir, ".pkg.tar.xz")
	if err != nil {
		return
	}

	if m.Signing {
		err = signing.SignPacman(outDir)
		if err != nil {
			return
		}
	}

	pkgs, err := utils.FindExt(outDir, ".pkg.tar.xz")
	for _, pkg := range pkgs {
		err = utils.Exec(outDir, "repo-add",
			fmt.Sprintf("%s.db.tar.gz", m.Name), pkg)
		if err != nil {
			return
		}
	}

	return
}
예제 #2
0
파일: project.go 프로젝트: pacur/pacur
func (p *Project) Repo(filter string) (err error) {
	_ = utils.RemoveAll(p.BuildRoot)
	_ = utils.RemoveAll(p.MirrorRoot)

	err = utils.MkdirAll(p.MirrorRoot)
	if err != nil {
		return
	}

	err = p.iterPackages(filter, func(target, path string) (err error) {
		proj, err := p.getProject(target, path)
		if err != nil {
			return
		}

		err = proj.Prep()
		if err != nil {
			return
		}

		return
	})
	if err != nil {
		return
	}

	for _, release := range constants.Releases {
		path := filepath.Join(p.BuildRoot, release)

		exists, e := utils.Exists(path)
		if e != nil {
			err = e
			return
		}

		if exists {
			proj, e := p.getProject(release, path)
			if e != nil {
				err = e
				return
			}

			err = proj.Create()
			if err != nil {
				return
			}
		}
	}

	err = utils.RemoveAll(p.BuildRoot)
	if err != nil {
		return
	}

	return
}
예제 #3
0
파일: project.go 프로젝트: pacur/pacur
func (p *RedhatProject) getBuildDir() (path string, err error) {
	path = filepath.Join(p.BuildRoot, p.Distro+"-"+p.Release)

	err = utils.MkdirAll(path)
	if err != nil {
		return
	}

	return
}
예제 #4
0
파일: mirror.go 프로젝트: pacur/pacur
func (m *Mirror) createRedhat() (err error) {
	outDir := filepath.Join(m.Root, "yum", m.Distro, m.Release)

	err = utils.MkdirAll(outDir)
	if err != nil {
		return
	}

	match, ok := constants.ReleasesMatch[m.Distro+"-"+m.Release]
	if !ok {
		err = &BuildError{
			errors.Newf("mirror: Failed to find match for '%s'",
				m.Distro+"-"+m.Release),
		}
		return
	}

	err = utils.RsyncMatch(m.Root, outDir, match)
	if err != nil {
		return
	}

	if m.Signing {
		err = signing.SignRedhat(outDir)
		if err != nil {
			return
		}
	}

	err = utils.Exec(outDir, "createrepo", ".")
	if err != nil {
		return
	}

	return
}
예제 #5
0
파일: mirror.go 프로젝트: pacur/pacur
func (m *Mirror) createDebian() (err error) {
	outDir := filepath.Join(m.Root, "apt")
	confDir := filepath.Join(m.Root, "conf")
	confPath := filepath.Join(confDir, "distributions")

	err = utils.MkdirAll(confDir)
	if err != nil {
		return
	}

	data := "Codename: " + m.Release + "\n" +
		"Components: main\nArchitectures: i386 amd64\n"

	if m.Signing {
		id, e := signing.GetId()
		if e != nil {
			err = e
			return
		}

		data += fmt.Sprintf("SignWith: %s\n", id)

		err = utils.CreateWrite(filepath.Join(confDir, "options"),
			"ask-passphrase\n")
		if err != nil {
			return
		}
	}

	err = utils.CreateWrite(confPath, data)
	if err != nil {
		return
	}

	err = utils.MkdirAll(outDir)
	if err != nil {
		return
	}

	match, ok := constants.ReleasesMatch[m.Distro+"-"+m.Release]
	if !ok {
		err = &BuildError{
			errors.Newf("mirror: Failed to find match for '%s'",
				m.Distro+"-"+m.Release),
		}
		return
	}

	debs, err := utils.FindMatch(m.Root, match)
	if err != nil {
		return
	}

	for _, deb := range debs {
		err = utils.Exec(m.Root, "reprepro", "--outdir", outDir,
			"includedeb", m.Release, deb)
		if err != nil {
			return
		}
	}

	return
}