mirror of
https://github.com/foo-dogsquared/wiki.git
synced 2025-01-31 01:57:54 +00:00
Update package management-related notes
This commit is contained in:
parent
19f9c856a6
commit
55f1981efc
@ -1,33 +1,13 @@
|
||||
#+title: Guix package manager
|
||||
#+date: "2020-08-19 08:21:44 +08:00"
|
||||
#+date_modified: "2021-03-28 18:24:02 +08:00"
|
||||
#+date_modified: "2021-04-24 01:17:31 +08:00"
|
||||
#+language: en
|
||||
|
||||
|
||||
[[https://guix.gnu.org/][GNU Guix]] is a package manager that follows the footsteps of [[file:2020-09-04-16-07-47.org][Nix package manager]] in furthering [[file:2020-09-19-08-31-48.org][Functional package management]].
|
||||
[[https://guix.gnu.org/][GNU Guix]] is a derivation of [[file:2020-09-04-16-07-47.org][Nix package manager]] in furthering [[file:2020-09-19-08-31-48.org][Functional package management]].
|
||||
As such, it addresses the concerns and the previous mistakes that the Nix community made while developing the software.
|
||||
|
||||
Similar to Nix, the team behind the package manager has created a system around it called *GuixSD*.
|
||||
With the [[https://guix.gnu.org/manual/en/html_node/][diverse functions of Guix]] as a general-purpose package manager, it can be considered as [[https://ambrevar.xyz/guix-advance/][one of the most advanced distros ever made]] (at least as of 2020-09-13).
|
||||
[fn:: With the added bonus of being created behind one of the figureheads that stands for software freedom, this is greater than one could expect when it comes to fully free Linux distros.]
|
||||
|
||||
One of the biggest (and most obvious) change is the usage of a general purpose language called [[https://www.gnu.org/software/guile/][GNU Guile]] instead of handrolling a custom language (e.g., [[https://nixos.org/manual/nix/stable/][Nix]]).
|
||||
This takes advantage of the already existing ecosystem (e.g., linter, analyzer, editor integrations) of Guile on top of the package manager.
|
||||
Being a general purpose also means a lot of possible ways to do one thing (and also shoot your foot) and with the extensibility of Guile (e.g., embedded languages, syntax), it furthers the idea of integrations of different ideas in one language.
|
||||
|
||||
Another one of the differences between Guix and Nix is the focus.
|
||||
The community of Guix is more focused to the following fields:
|
||||
|
||||
- [[https://reproducible-builds.org/][Reproducibility]] which already exists with the how functional package management works but with improvements such as [[https://guix.gnu.org/manual/en/html_node/Substitutes.html#Substitutes][substitutes]], [[https://guix.gnu.org/blog/2020/grafts-continued/][grafts]], and integration with other projects such as [[https://www.gnu.org/software/guix/blog/2019/connecting-reproducible-deployment-to-a-long-term-source-code-archive/][Software Heritage]] and [[https://guix.gnu.org/manual/en/html_node/Security-Updates.html][Common Vulnerabilities and Exposures (CVE)]].
|
||||
- [[http://bootstrappable.org/][Bootstrappable builds]] which [[https://guix.gnu.org/manual/en/html_node/Bootstrapping.html#Bootstrapping][includes various functions]] to setup your distribution from scratch.
|
||||
- [[https://hpc.guix.info/][High-performance computing]] for enabling scientific workflows with [[file:2020-04-12-11-20-53.org][Reproducible research]].
|
||||
- Empowering individual users which is emphasized further with the ability to [[https://hpc.guix.info/blog/2017/10/using-guix-without-being-root/][installing packages without root privileges]], [[https://guix.gnu.org/manual/en/html_node/Invoking-guix-environment.html#Invoking-guix-environment][creating development environments]] similar to Python's virtualenv, and [[https://www.gnu.org/software/guix/manual/en/html_node/Channels.html][using channels]].
|
||||
|
||||
|
||||
|
||||
|
||||
* Resources
|
||||
|
||||
- [[https://guix.gnu.org/cookbook/][GNU Guix cookbook]]
|
||||
- [[http://www.gnu.org/software/guix/blog/2018/a-packaging-tutorial-for-guix/][GNU Guix packaging tutorial]]
|
||||
- [[https://github.com/pmeiyu/guix-config][This GuixSD config by pmeiyu@github.com]]
|
||||
- Addresses storage issues commonly tied with reproducibility such as [[https://guix.gnu.org/manual/en/html_node/Substitutes.html#Substitutes][substitutes]] and [[https://guix.gnu.org/blog/2020/grafts-continued/][grafts]].
|
||||
- Integration with other projects such as [[https://www.gnu.org/software/guix/blog/2019/connecting-reproducible-deployment-to-a-long-term-source-code-archive/][Software Heritage]] and [[https://guix.gnu.org/manual/en/html_node/Security-Updates.html][Common Vulnerabilities and Exposures (CVE)]].
|
||||
- A focus on [[http://bootstrappable.org/][bootstrappable builds]] which [[https://guix.gnu.org/manual/en/html_node/Bootstrapping.html#Bootstrapping][includes various functions]] to setup your distribution from scratch.
|
||||
- Empowering individual users which is emphasized further with the ability to [[https://hpc.guix.info/blog/2017/10/using-guix-without-being-root/][installing packages without root privileges]], [[https://guix.gnu.org/manual/en/html_node/Invoking-guix-environment.html#Invoking-guix-environment][creating local development environments]], and [[https://www.gnu.org/software/guix/manual/en/html_node/Channels.html][using channels]].
|
||||
|
@ -1,6 +1,6 @@
|
||||
#+title: Nix package manager
|
||||
#+date: "2020-09-04 16:07:47 +08:00"
|
||||
#+date_modified: "2020-09-09 05:25:03 +08:00"
|
||||
#+date_modified: "2021-04-24 01:46:41 +08:00"
|
||||
#+language: en
|
||||
|
||||
|
||||
@ -11,8 +11,3 @@ Holistically, Nix is made up of at least four components: the store, the languag
|
||||
- The derivations are essentially build instructions.
|
||||
- The language (also called as Nix but we'll refer to it as Nixlang) is a domain-specific language for creating derivations.
|
||||
- The build process can be locked in a sandbox, improving the reproducibility of a setup and lowering the attack surface for a malicious package.
|
||||
|
||||
Furthermore, it also offers one of the must-haves as a power user (in my opinion) which is declarative configuration.
|
||||
You can write the whole system configuration in a plain-text file giving you all of the little knobs and switches of the system.
|
||||
Even then, it also applies some abstraction if you don't want the full control which is an attractive option if you're looking for a quick setup.
|
||||
Finally, they are suitable to be used under a version control system like Git and Subversion giving more room for experimentation [fn:: As if the rollback feature for NixOS wasn't enough.] and control.
|
||||
|
@ -1,21 +1,9 @@
|
||||
#+title: Software packaging
|
||||
#+title: Common problems with software packaging
|
||||
#+date: "2020-09-13 19:42:06 +08:00"
|
||||
#+date_modified: "2020-09-14 00:15:26 +08:00"
|
||||
#+date_modified: "2021-04-24 01:46:13 +08:00"
|
||||
#+language: en
|
||||
|
||||
|
||||
I've been dabbling with software packaging for a few days (as of 2020-09-13) and all I can say that it is a rewarding experience having to know different tools (e.g., build systems, version control systems).
|
||||
It even made me comfortable in exploring the source code of several projects unlike before.
|
||||
|
||||
One of the most boring yet vital parts of maintaining a distribution (e.g., [[http://www.debian.org/][Debian]], [[http://archlinux.org/][Arch Linux]], [[https://www.freebsd.org/][FreeBSD]], [[https://www.microsoft.com/software-download/windows10][Windows 10]]) is software packaging.
|
||||
It allows for a more convenient software management process for the users and make the operating system more usable with more software readily available.
|
||||
As a consequence, derived distros can take advantage of the already existing package ecosystem of its parent distro (Ubuntu with Debian's package list, for instance).
|
||||
|
||||
What makes Linux more comfortable to work with is how most of its distribution integrates package management within its users.
|
||||
[fn:: Windows is starting to catch up with its [[https://github.com/microsoft/winget-cli/][official package manager]] (along with others such as [[https://scoop.sh/][Scoop]] and [[https://chocolatey.org/][Chocolatey]]) but it happened decades after Linux have it already.
|
||||
Better late than never, I guess.]
|
||||
To install a package, you just need a package manager which is installed on most Linux-based systems (e.g., ~apt install $PKG~, ~pacman -S $PKG~, ~nix-env -i $PKG~, ~guix package -i $PKG~).
|
||||
|
||||
Several of the problems I've encountered while practicing packaging (aside from unfamiliarity, of course) is of the following:
|
||||
|
||||
- How distinct each project could be in case they don't follow the standard.
|
||||
|
Loading…
Reference in New Issue
Block a user