KatsuoRyuu wrote:And nobody will use Gentoo when the packages become more and more deprecated and harder and harder to maintain.
Then it's a good thing that the core Gentoo packages are widely used and are not being deprecated.
KatsuoRyuu wrote:I'm specializing in Maintenance, and maintainable code structures, I build our Pipelines my team at work, and thats not a startup. Still with an enterprise company like this we are adjusting to the tech, which Gentoo has seemed to stop doing.
When the technology is as poorly considered as this particular Golang feature seems to be, you shouldn't adjust to it. You should work around it, and bug upstream Golang to behave better. In your maintenance workflow, how do you propose to ensure that if you install minikube today, again next month, and a year after that, all nominally from the same commit, that you actually get the same code every time? As far as I can tell, if you let Golang's
go get download this supporting package on its own, you can't ensure that. You can't even ensure that the test environment and the production environment install the same code, and you can't install in either of those without granting https access to Github.
KatsuoRyuu wrote:I liked gentoo when it was a bit more bleeding edge, I feel a lot of packages are falling behind.
Are they falling behind because upstream is behaving badly or because Gentoo lacks the resources to keep current? If the latter, you could volunteer to proxy-maintain packages that are important to you. If the former, you could volunteer in upstream projects to teach them to behave better. Remember that projects gain and lose contributors over time. The people making a mess of the project now may not be the same visionaries who created it.
KatsuoRyuu wrote:Hu wrote:Why not help upstream improve their practices, so that they are easier for everyone, not just Gentoo, to package and to keep current?
Im not saying not to do that - but how would you do that? its not like you can go to the Japan National bank and tell them to start using USD or BTC instead of JPY. If it was i would gladly do that.
Join a project that is behaving badly. Contribute patches that make it easier for distributions to package. In the case at hand, Golang needs:
- A way to prevent the automatic download, and instead display a diagnostic telling the user that supporting packages are missing.
- Ebuilds for the supporting packages
- Ideally, a way to generate ebuilds, srpms, deb-srcs, etc. from the control information that Golang already uses to drive go get.
KatsuoRyuu wrote:Opposite you are again talking about bad practice - but you can download the source - it might not come from a blob, but where is the difference from git,svn,ftp,http. You are (in case of go) going to build a GO application so you need to go compiler, there by you have the downloader, so no change in dependencies.
First, I consider it a fundamentally wrong design to bundle the compiler and the downloader into a single package. How do you propose to handle the case that I have an Internet-connected system with no Go, and a non-Internet-connected system (that gets all its files via sneakernet) with Go, and I want to install Golang packages on the latter? With Portage packages, this is easy. Get the same Portage tree on both systems. Run
emerge --fetchonly --pretend on the build system. Take that list to the download system. Download those files. Bring them to the build system. Run
emerge, and it will use the manually provided files. This is a common use case during early setup, because people don't always have a working network, especially if their only network access on the build system comes through a wireless card. Fortunately, for today, most people in that situation can get their environment working without needing anything based on Golang. Will that continue to be the case, or will bootstrap-relevant packages be rewritten in Golang? If Golang is fixed soon to support split installs, we don't need to worry that such rewrites will trouble users later. Second, in the case shown (and as I understand
go get, this applies more generally), you can download some source, but what source do you get? Your opening post was trying to fetch the latest commit, not any particular version. For some packages, it is necessary to be able to pin supporting libraries to known good versions. (This is in some cases a workaround for the supporting upstreams making breaking changes, but the reality is that some projects do that, so others need a way to cope.)
I expect that, if you disabled the network-sandbox that affected your opening post, then built minikube, uninstalled it, and built it again, then
go get would download that supporting library again. For people with limited bandwidth, that is undesirable. Portage downloads the sources once, then keeps them until told otherwise. This enables offline rebuilds, and ensures that rebuilding a non-live package does not suddenly produce different results through no action of the user.
KatsuoRyuu wrote:You can download the content and repack it putting it in your distfiles folder. If ebuild was made so that it could handle customized download strategies like that its no problem, but if you the only acceptable is tar.gz then why do we have git, or svn for that matter.
ebuilds can handle anything that you can reasonably unpack. tar.gz is a common form, but not the only one. We support git, svn, etc. for those projects that refuse to issue releases in a timely manner. This covers both projects that develop so rapidly that a release would promptly be out of date and projects that simply don't issue releases, even for bugfixes, on any useful timetable.
Putting an appropriate archive in SRC_URI, as I described above, would download the content to your distfiles for you,
and handle applying appropriate checksum validation.
KatsuoRyuu wrote:wouldnt it just be
Code: Select all
// Download process
go get -d
// Pack it zip, tar etc
// build
go build
// install eg. /opt/go
GOPATH=/opt/go go install
You missed the step where we check the signature on the downloaded archive, but generally, yes. However, that path is only appropriate if you are building only for yourself and have no plans to be able to re-package later, or uninstall, or record what version you built. None of what you showed integrates with the system package manager at all, so whether you're on Gentoo, Fedora, or Debian, you won't later be able to use standard tools to check which package installed a file, or check which files were modified post-installation. Registering the installed files with the system (
/var/db/pkg for Gentoo) enables common tooling to handle the files effectively. Suppose a supporting package issues a critical security update, and you need to rebuild every Golang program that linked to it. How do you find which ones those are? If we were discussing packages under Portage control, the answer would be to inspect the package database for dependency information.
If you want to make an ebuild, you need one or more URIs where you can download the sources, you need
go get to read from distfiles instead of the network, and if upstream doesn't release source archives, then you need some way to make those and upload them to an appropriate mirror.
KatsuoRyuu wrote:If you want it you can make a patch, it is open source, the license is even nice and open. So please fix the issue.
The license may be open, but the contribution process is not particularly friendly. According to their documentation:
- Step 1: Contributor License Agreement