Package managers are complex tools that handle versioning, dependencies, updates, uninstalls and so on.
No. The original package manager can only handle install, uninstall and update (even no update). Since 1995 CPAN was invented, the package manager start to add feature to handle download and dependency resolve.
Actually you still can find this kind old school package manager: Slackware, its package manager can only handle install, uninstall and update. It won't do any dependency check or version check. It's package format also very simple: just a tarball, install is extract tarball to specific directory and execute doinst.sh
in tarball. Uninstall is invert, remove all files in tarball and execute douninst.sh
.
If you package all files needed by install process into a tarball and place it in your repo, you will get a Slaceware package manager with download feature. (Slackware don't have download feature, all official packages were included in install media and you must download third-party packages by yourself.)
Package mangers are also distro specific.
Package manager can be universal. But make it universal with cost: since it can't depend on any distro-specific thing, it must include nearly everything of userspace.
(NOTE: Your script repo is not universal since prebuilt binary downloaded from script usually depends on some distro-specific things, such as Glibc version. Glibc is backward compatible, but not forward compatible. So you can't use these binary in the environment with lower version glibc than when it was built. So many projects will try to avoid these things, they use static-linked musl or don't use libc at all (e.g. Golang). But it will bring maintenance pressure so most projects don't do it unless there is an infrastructure to do it easily, such as Golang)
Actually there is some package manager make themselves universal like Gentoo-prefix and Nix.
Someone suggested brew. How do you install brew according to https://brew.sh/ ?
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
See the problem?
That's bootstrap problem. You always need a way to get the first package manager. I don't know how Homebrew do. But you can use curl command to download static-linked version package manager to use it without any https://example.com/install.sh
for most linux package manager (Except the one written by python. Actually you can do it as well, just download hundreds of files is annoying.).
Suggest use
fsfreeze --freeze
to block all access operation to create a stable image without unmount the SD card. (And release it later usingfsfreeze --unfreeze
.)BTW, this feature was created by XFS and was moved to VFS in Linux 2.6.29 so all filesystems supported by Linux gained this feature.