[HN Gopher] Using NetBSD's pkgsrc everywhere I can
       ___________________________________________________________________
        
       Using NetBSD's pkgsrc everywhere I can
        
       Author : jayp1418
       Score  : 56 points
       Date   : 2021-05-26 17:03 UTC (5 hours ago)
        
 (HTM) web link (rubenerd.com)
 (TXT) w3m dump (rubenerd.com)
        
       | ehw3 wrote:
       | I really like pkgsrc. I'm not really qualified to give a
       | technical justification for it. It just had the right simple,
       | clean feel to it, which NetBSD in general has. I would even go so
       | far as to say that it was fun to use.
       | 
       | I consequently once spent quite some time trying to get it
       | working under Cygwin so I could use it at work, but never got
       | past problems with Cygwin group names that have spaces in them.
       | It was too complex for me to fix....
        
       | pxc wrote:
       | I'd been wondering how good pgksrc is on macOS for a little
       | while, previously having used Homebrew wherever Nixpkgs was
       | inconvenient or incomplete. Could pkgsrc could be a better
       | choice?
       | 
       | pkgsrc is relatively nice for a cross-platform, source-based
       | package manager in the old style, in that it provides convenient
       | binary caches for most use cases.
       | 
       | I wonder: Has the writer of the post in the OP tried any next-gen
       | source-based package managers, where the kind of isolation he
       | describes as desirable between system and user packages is
       | guaranteed between all packages altogether?
        
         | nerdponx wrote:
         | I'm always interested to try different things, but I don't
         | understand why people seem to dislike Homebrew so much. I've
         | been a mostly-happy user on both Mac and Linux for years.
        
           | mixmastamyk wrote:
           | Built in telemetry/analytics was enough for me to not touch
           | it with a ten foot pole.
        
           | kelp wrote:
           | I dislike it because it's really slow to do everything. Even
           | printing help text is slow.
           | 
           | Contrast with pacman on Arch, which is incredibly fast at
           | nearly every operation.
           | 
           | Unfortunately I've found all the package managers for macOS
           | to be lacking.
           | 
           | brew is slow, but has packages for most things and generally
           | up to date.
           | 
           | fink packages seem a bit out dated last I checked. At least
           | the ones I cared about.
           | 
           | MacPorts is also slow and somewhat out of date.
           | 
           | pkgsrc doesn't have Apple M1 binary packages available yet.
           | 
           | I haven't tried Nix.
           | 
           | Sometimes I'm tempted to try my hand at writing my own
           | package manager for macOS, but getting a critical mass of
           | packaged software seems quite hard.
        
             | znpy wrote:
             | > pkgsrc doesn't have Apple M1 binary packages available
             | yet.
             | 
             | basing this reply on my past experience with pkgsrc (in a
             | netbsd or linux environments though) as long as you can
             | point pkgsrc to a decent compiler and it can complete its
             | bootstrap phase, it'll likely work.
        
             | smoldesu wrote:
             | +1 for pacman.
             | 
             | Homebrew's biggest issue is that it isn't a package manager
             | for MacOS. You can interpret that however you want, but
             | it's versatility is extremely limited compared to "full-
             | fat" package managers like apt and pacman. At the end of
             | the day, all of the MacOS package managers fit together to
             | perform separate stop-gap solutions, where none of them
             | _really_ fell that great to use in the first place. Hell,
             | pacman is so good that it 's one of the core reasons I'll
             | probably never end up fully switching my workflow to MacOS.
        
           | pxc wrote:
           | It's got a larger user and contributor base on macOS than
           | competing package managers, and that works in its favor,
           | especially in terms of package selection. I'm not a total
           | hater; there are people I respect who prefer Homebrew over
           | tools that I like better for reasons I understand. And
           | package management is a peculiar interest of mine, so I care
           | a lot about details and there isn't any package management
           | system that totally satisfies me.
           | 
           | That said, every time I've used it, I've been struck by
           | design flaws that make Homebrew feel incomplete or immature
           | compared to most Linux system package managers. Some
           | examples:
           | 
           | * The last time I used it, Homebrew didn't even support
           | recursive uninstallation of orphaned dependencies,
           | guaranteeing the accrual of entire packages of cruft over
           | time. This was apparently finally fixed (in the crummy way
           | that apt-get, the worst of all the Linux system package
           | management tools, handles it) only in 2020 [1].
           | 
           | * A secondary package manager taking over all of /usr/local
           | is quite presumptous and not portable at all
           | 
           | * Homebrew's combination of an assumption of a single-user
           | setup with the choice of installing to global directories in
           | the FHS is awful, and imo it's straight up deceptive to claim
           | that Homebrew's default setup meaningfully supports
           | 'unprivileged package installation'
           | 
           | * `brew cask` is useful, but the cleavage between it and the
           | rest of Homebrew is awkward, and it's more like an installer-
           | fetcher a la Chocolatey than a real package management system
           | 
           | * Homebrew's packages are built with a relatively low degree
           | of isolation from the base system's libraries and toolchain,
           | so it's not unusual for a macOS upgrade to break installed
           | Homebrew packages, and the build outputs and bottles
           | associated with a package are given per-macOS release. (To be
           | fair, the former is a pretty common problem for all kinds of
           | software on macOS, as well.)
           | 
           | * I really don't like Linuxbrew's abuse of /home, which you
           | have to stick with if you want to use bottles (binary caches)
           | 
           | * Homebrew just doesn't support managing dependencies on
           | libraries in some languages (e.g., Perl) at all [2]-- even
           | though it includes packages that depend on them-- which fails
           | to meet my bare minimum expectations for a general-purpose
           | package manager. In practice, this means that you have to
           | install additional, language-specific package managers to use
           | Homebrew; you have to manage dependencies in them yourself;
           | and Homebrew packages require you to install these
           | dependencies in system-wide locations, polluting your whole
           | operating system (a potential source of dependency hell, as
           | well as a practical nuisance) for their sake. The latter
           | also, of course, undercuts the unprivileged installation
           | claim that Homebrew touts.
           | 
           | To be fair to Homebrew, it's been a while since I used a Mac
           | on a daily basis, and I expect that Homebrew has improved in
           | some ways in the meantime. I know for certain that it's
           | improved, to reiterate an example given earlier, with respect
           | to some, if not all (i.e., not those managed externally)
           | orphaned dependencies. And Homebrew also has some strengths,
           | namely its very slick and orderly command-line interface.
           | 
           | But the real reasons I try to use Homebrew as little as
           | possible aren't about Homebrew being _bad_ so much as my
           | preference for tools with other strengths (which require a
           | design different from Homebrew's to implement). On macOS, I
           | try to use Nixpkgs and nix-darwin as much as possible because
           | I prefer things like: * declarative configuration rather than
           | imperative state management * fully isolated builds, more
           | predictable solutions * using a single package management
           | tool for libraries and apps of all languages * building .apps
           | from source like any other package * atomicity of upgrades *
           | freedom to roll back configurations/installations at any time
           | * ability to mix and match packages from different releases,
           | modify dependencies for one project without affecting another
           | * never installing language interpreters or libraries
           | globally, except for login shells
           | 
           | I don't really want to use anything that doesn't have those
           | features, and for that on macOS, Nix is the only game in
           | town. Homebrew is a pile of state to manage, and I'd rather
           | have intentions to declare than a pile of state to manage.
           | That issue isn't unique to Homebrew, of course.
           | 
           | Pkgsrc doesn't share some of Homebrew's (in my view) other
           | defects, like its abuse of the FHS on Linux, single-user
           | design/bad permissions configuration, building many packages
           | directly on top of macOS system libraries that change from OS
           | release to OS release when it doesn't have to, or the
           | expectation that library dependencies for some languages will
           | be managed manually/externally (and in global directories, to
           | top it off), so that's what makes Pkgsrc interesting to me as
           | an alternative to Homebrew, even though Nix will still always
           | be my first-line choice on macOS.
           | 
           | --
           | 
           | 1: https://github.com/Homebrew/brew/commit/0fa417706a2143dbec
           | 1e...
           | 
           | 2: https://docs.brew.sh/Gems,-Eggs-and-Perl-Modules
        
           | mulmen wrote:
           | In addition to the valid criticisms in sibling comments:
           | 
           | I don't like that it changes the rules on file ownership in
           | /opt and /usr/local.
           | 
           | And it's petty but I really don't appreciate the beer brewing
           | metaphor. It doesn't fit and it feels forced. Giving the
           | project a searchable name is fine but cutesy names are
           | irritating when I have real work to do. Just name the tool
           | and especially commands for what they do.
           | 
           | I say this as a person who loves beer.
        
             | smoldesu wrote:
             | I also hate the brewing metaphors. I don't know why MacOS
             | developers feel so compelled to abstract integral parts of
             | your program away into unrecognizable metaphors. It's like
             | asking for ketchup at the counter of a diner, and they
             | insist that they only have "Heinz Tomato Sauce". Nobody in
             | real life does this because nobody likes a smartass, so it
             | completely escapes me why people think it's suddenly okay
             | to do in software, particularly software designed to be
             | used in a professional, power-user workflow.
        
         | 1vuio0pswjnm7 wrote:
         | What are the dependencies of these "next-gen" package managers.
         | pkgsrc itself only needs C and a POSIX-like shell.
        
           | pxc wrote:
           | Fair question!
           | 
           | The two that I know of currently are Nix and Guix. Both
           | target fewer platforms than Pkgsrc, so we know right out of
           | the gate that they're not suitable for all Pkgsrc use cases.
           | 
           | The question of what they depend on needs fleshing out before
           | it can be answered. Both Nix and Guix package software in a
           | way that is, in general, hermetic. This means that they don't
           | assume the installation of _anything_ outside their domain--
           | they don 't require you to have anything installed on the
           | base system to get going with them. They don't use your
           | system's shell and they don't use your system's C library. As
           | an exception on macOS, Nixpkgs allows some impurities for
           | some macOS packages, e.g., they are allowed to call
           | xcodebuild. But in general, they include their own toolchains
           | in their entireties. So if what you're getting at is 'where
           | do they depend on the base system during operation', the
           | answer is, more or less 'nowhere'.
           | 
           | If the real thrust of your question is rather 'what do you
           | need to build them from source', the answer, for now, in both
           | cases is 'a bunch of shit that they kindly prepackage for you
           | in a binary tarball, if you want to bootstrap your own Nix or
           | Guix on a given platform'. Guix has been doing a ton of work
           | to reduce the size of their bootstrap seed, and it seems like
           | within a few years they'll have it down to a hex monitor from
           | which they can build a series of Scheme interpreters and C
           | compilers until they have the whole system.
           | 
           | If the main thing you're asking about is 'what do they use
           | internally to process their package sets' or something like
           | 'what's the minimum installed size of these package
           | managers': for Nix/Nixpkgs you need the Nix language
           | interpreter (written in C++), plus at least what's packaged
           | in the 'standard environment' for Nixpkgs (GNU bash and
           | coreutils, plus a libc and a C compiler which vary by
           | platform); and for Guix you need Guile, an implementation
           | (interpreter and runtime) of Scheme. I've never worried about
           | their installed sizes, since they're much smaller than the
           | total size of everything you might want to install with them.
           | 
           | Idk the size of the full dependency closure for Guix and I
           | don't have a great way to look it up at the moment. In the
           | Nix case, the binary installation tarball is ~17 MB
           | compressed and ~72 MB uncompressed, when you install it.[1]
           | 
           | Happily, if Pkgsrc is easier to get started with due to its
           | smaller footprint, it looks like in the future users will be
           | able to use Pkgsrc to install Nix.[2] :)
           | 
           | (For my part, I wouldn't mind if Nixpkgs included Pkgsrc,
           | too. I wish it included Guix.)
           | 
           | --
           | 
           | 1: https://releases.nixos.org/?prefix=nix/nix-2.3.9/
           | 
           | 2: https://pkgsrc.se/wip/nix
        
       | kchoudhu wrote:
       | I've been using pkgsrc to package our firm's stuff for Mac OS X
       | clients, it works a charm.
       | 
       | https://www.anserinae.net/setting-up-a-pkgsrc-repository.htm...
       | 
       | Currently working on using it to distribute the same software to
       | Linux. Will be great when it gets there, but we aren't quite
       | ready yet.
        
       | johnklos wrote:
       | Other package management systems do one or two of the following
       | things, but I haven't found any that can do all three at once,
       | other than pkgsrc:
       | 
       | 1) have good availability of pre-built binary packages for most
       | platforms
       | 
       | 2) facilitate building of packages directly from source, whether
       | on non-mainstream platforms / architectures, and / or with or for
       | the purpose of non-default package options
       | 
       | 3) unprivileged builds / installations, packages rooted anywhere
       | in filesystem, completely self-contained dependencies
       | 
       | Having to use more than one package management system because one
       | or the other doesn't do one of these things can be a real pain,
       | and can make maintenance rather difficult.
        
         | rakoo wrote:
         | I _think_ Archlinux 's PKGBUILDs can do that (https://wiki.arch
         | linux.org/title/Creating_packages#Creating_...):
         | 
         | - With both the community-maintained packages and the AUR
         | packages, you can already find almost any binary that already
         | exists
         | 
         | - If it doesn't exist, or if you need particular
         | options/architectures, a PKGBUILD is basically a glorified
         | Makefile with standard steps, so you can for example get
         | binaries from a http source and use them directly, or pass
         | exotic compilation flags during the build() phase
         | 
         | - It is of course possible to put dependencies inside a given
         | package
         | 
         | - preparing a package is entirely done by your user, no need
         | for root right. Inside the package you put your files in a fake
         | root, and when the package is done you apply the package to
         | your real fs. By default it is installed under /, so of course
         | you need root rights, but you can install it under any root you
         | desire. This is actually what's done when installing Arch: it
         | basically runs pacman (the package manager) but instead of
         | installing packages in the live environment's root, it installs
         | packages in the mounted filesystem that will become your root
         | after rebooting.
        
           | Foxboron wrote:
           | We are missing unprivileged builds and clean chroot builds
           | for `makepkg`. Our interal devtools uses `systemd-nspawn`
           | which requires root. But that should be easy to implement
           | with the leftover code we tried to use with our reproducible
           | builds tooling.
           | 
           | https://github.com/archlinux/archlinux-repro/pull/70
           | 
           | Maybe a weekend hack to wrap `makepkg` with this.
        
         | fiddlerwoaroof wrote:
         | nix does all three of these, I think.
        
           | johnklos wrote:
           | How does one bootstrap nixpkgs from source? Trying to install
           | nix gives:
           | 
           | sh install-nix-2.3.10 install-nix-2.3.10: sorry, there is no
           | binary distribution of Nix for your platform
        
           | johnklos wrote:
           | It looks interesting. However, documentation is sparse. It
           | doesn't clearly say what platforms are supported other than
           | macOS and NixOS (which implies Linux in general, but doesn't
           | clearly state it). Also, it seems to only target x86 and
           | amd64. No mention is made of any other architecture, nor of
           | any BSD other that macOS.
           | 
           | Do you have more information?
        
             | ProfDreamer wrote:
             | From <https://nixos.org/manual/nix/stable/#ch-supported-
             | platforms>:
             | 
             | > Nix is currently supported on the following platforms:
             | 
             | > - Linux (i686, x86_64, aarch64).
             | 
             | > - macOS (x86_64).
        
           | fiddlerwoaroof wrote:
           | I guess 3 is sort of anti-nix, but I think nix effectively
           | has this with the way nix-build/nix-shell work.
        
       | inamiyar wrote:
       | Very interesting, I didn't know pkgsrc could be used on Linux,
       | I'll check it out. In general the only things keeping me from BSD
       | are non free apps like Zoom so the next best thing is to BSDify
       | my systems.
        
         | xaduha wrote:
         | I'd try nixpkgs before trying pkgsrc if for some reason I
         | wasn't satisfied with ones that come with the distro. Not sure
         | why BSDfying packages is desirable by itself.
        
       | xaduha wrote:
       | No mention of DragonflyBSD? They used pkgsrc as their main
       | package manager for 10 years, portable or not, it still required
       | quite a bit of maintenance. Seems like it was too much in the
       | end, second-class citizen rights are not great.
        
         | cpach wrote:
         | Did they migrate away from pkgsrc? If so, do you know any
         | specifics about why?
        
           | xaduha wrote:
           | https://lists.dragonflybsd.org/pipermail/users/2013-Septembe.
           | ..
        
       | sally1620 wrote:
       | I wonder if anyone is going to create a linux distribution with a
       | base system baked in with pkgsrc managing the applications. It
       | would be very useful for containers and WSL.
        
         | znpy wrote:
         | There used to be one, which was based on Slackware (of course).
         | If i find the name of that distro i'll either edit this post or
         | reply to myself :)
         | 
         | I tried hand-rolling something similar with slackware 11 or 12
         | (can't remember now).
        
       ___________________________________________________________________
       (page generated 2021-05-26 23:01 UTC)